PHP SimpleTest çerçeve hızlı başarısız yapılandırılabilir?

3 Cevap php

Ben PHP SimpleTest çerçeve yeniyim, ve ben başarısız bir iddia test yöntemini durdurmak olmadığını görünce şaşırdı. Diğer bir deyişle, bu test raporunda iki hata iletileri neden olur:

function testFoo() {
    $this->assertTrue(true, 'first: %s');
    $this->assertTrue(false, 'second: %s');
    $this->assertTrue(false, 'third: %s');
}

Benim birim test deneyim çoğu JUnit ve NUnit ile, ve her ikisi de kısa sürede ilk onaylama işlemi başarısız olarak bir test yöntemi durdurmak. Belki sadece o için kullanılan değilim, ama ekstra başarısızlık mesajları sadece gürültü olacak gibi görünüyor. Çünkü bir eksik noktalı virgül 50 hatalarını kusmak istiyorum eski C derleyicileri hatırlatıyor.

Ben SimpleTest hızlı başarısız yapılandırabilirsiniz, ya da sadece farklı bir stil ile yaşamak zorunda mı?

3 Cevap

You could extend/modify the Reporter class so it will exit() after a paintFail().
(No modification of the unittests required)

Veya

Assert * fonksiyonları Yani, örneğin, bir boolean değer döndürür:

 $this->assertTrue(false, 'second: %s') or return;

Geçerli test fonksiyonu sona erecekti.

PS:
If you're using PHPUnit_TestCase class instead of UnitTestCase, the assert* functions won't return a boolean.

Bu gerçekten soruyu cevaplarken, ama buna değer ne için, PHPUnit her zaman hızlı başarısız değildir.

http://www.phpunit.de/manual/current/en/goals.html diyor ki:

... Bir test başarısız ilk kez, deney duraklardan yürütme ve PHPUnit hatası bildiriyor.

Assert yöntemleri geçmek için bir boolean değer döndürmek veya başarısız yapmak, böylece kontrol ve bir şey başarısız olduğunda testi durdurabilirsiniz.

Ben bu projede her test için ölçeklenebilir olduğunu sanmıyorum, ama bazı özellikle gürültülü testler ondan yararlanabilir.

İşte basit bir örnek:

function testBar() {
    $pass = $this->assertTrue(true, 'first: %s');
    $pass = $pass && $this->assertTrue(false, 'second: %s');
    $pass = $pass && $this->assertTrue(false, 'third: %s');
}

Ifadeleri kod büyük parçalar sarmak için eğer kullanabilirsiniz.