Bazı Sipariş çalıştırın PHPUnit Testleri

7 Cevap php

Belli bir düzen içinde çalıştırmak için bir TestCase içine testleri almak için bir yolu var mı? Örneğin, ben imha kullanmak yaratılış bir nesnenin yaşam döngüsünü ayırmak istiyorum ama diğer testler çalıştırmadan önce nesne ilk ayarlanmış olduğundan emin olmanız gerekir.

7 Cevap

Belki testlerde bir tasarım sorunu var.

Genellikle her test herhangi diğer testlere bağlı olmamalıdır, bu yüzden herhangi bir sırayla çalıştırabilirsiniz.

Her test mükemmel bir yaklaşım olacaktır çalıştırmak için gereken her şeyi, örneğini ve yok etmek gerekiyor, nesneleri paylaşmak ve testler arasında devletler asla.

Eğer N testler için aynı nesneyi neden ihtiyaç hakkında daha spesifik olabilir misiniz?

PHPUnit @depends açıklama üzerinden test bağımlılıkları destekler.

İşte sonraki bir argüman geçen her bir bağımlı test ile testler bağımlılıkları karşılayan bir düzen içinde çalıştırmak olacaktır belgelerine, bir örnek:

class StackTest extends PHPUnit_Framework_TestCase
{
    public function testEmpty()
    {
        $stack = array();
        $this->assertEmpty($stack);

        return $stack;
    }

    /**
     * @depends testEmpty
     */
    public function testPush(array $stack)
    {
        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertNotEmpty($stack);

        return $stack;
    }

    /**
     * @depends testPush
     */
    public function testPop(array $stack)
    {
        $this->assertEquals('foo', array_pop($stack));
        $this->assertEmpty($stack);
    }
}

Ancak, (bu başarısız test çabuk dikkat getiriyor gibi, arzu) çözülmemiş bağımlılıkları ile testler not idam edilecek unutmayın önemlidir. Yani, bağımlılıkları kullanarak zaman yakın dikkat etmek önemlidir.

Eğer testler, çeşitli yardımcı nesneleri ve ayarları paylaşmak istiyorsanız, setUp(), tearDown() sharedFixture özelliğine eklemek için kullanabilirsiniz.

PHPUnit kullanımı bağımlı test durumları belirtir ve bağımlı test durumlarda arasındaki argüman ileterek verir notunu '@ bağlıdır' verir.

Ne, giriş şeyler yapmak ve sonra oturumu için gereken bir uygulama oluşturursanız?

test01CanLogin();

/*
 * @depends test01CanLogin
 */
test02GetUserInfo();

/*
 * @depends test01CanLogin
 */
test03GetUserFriends(); //depends on 01

/*
 * @depends ?
 */
test04Logout(); // must be the last one

Benim görüşüme göre, ben oluşturulmasını test etmek gerekir ve belirli bir kaynak yok Aşağıdaki senaryoyu alır.

Başlangıçta iki yöntem, bir vardı. testCreateResource b. testDestroyResource

a. testCreateResource

<?php
$app->createResource('resource');
$this->assertTrue($app->hasResource('resource'));
?>

b. testDestroyResource

<?php
$app->destroyResource('resource');
$this->assertFalse($app->hasResource('resource'));
?>

Ben testDestroyResource testCreateResource bağlıdır bu, kötü bir fikir olduğunu düşünüyorum. Ve daha iyi bir uygulama yapmak olacaktır

a. testCreateResource

<?php
$app->createResource('resource');
$this->assertTrue($app->hasResource('resource'));
$app->deleteResource('resource');
?>

b. testDestroyResource

<?php
$app->createResource('resource');
$app->destroyResource('resource');
$this->assertFalse($app->hasResource('resource'));
?>

Belli bir sırayla çalıştırmak gerekirse gerçekten testleri ile bir sorun var. Her test diğerlerinden tamamen bağımsız olmalıdır: bu defekt lokalizasyonu ile size yardımcı olur, ve tekrarlanabilir almak (ve dolayısıyla debuggable) sağlar sonuçları.

Ödeme this site Eğer bu tür konuları önlemek için, bir şekilde sizin testleri faktör hakkında fikir / bilgi, bir bütün yük.