2012-05-09 17 views
32

"Sıkı mod PHPUnit'te" ne hakkında merak ediyorum?PHPUnit Strict modu ne yapar?

örn:

<phpunit strict="true"> 

phpunit --strict 

veya phpunit.xml içinde

Sadece denemek ve benim testler

PHP_Invoker_TimeoutException: Execution aborted after 1 second 

cevap

19

Kısa cevap: Uzun koşu testleri için izin çalışma süresini artırmak için bir ek açıklama kullanın:

@large // 10 seconds 
@medium // 5 seconds 
@small // 1 second max <-- Default, so no point using 

Uzun Cevap: İşte

türetilmiştir bilgi güncellenmiş kümesidir @Crozin yardımıyla. Benim durumumda hata, bir testin çok uzun sürdüğüydi (> 1 saniye idi.).) (Doctrine ORM şema damlası + oluşturma, işleri yavaşlatabilir, see this ZendCast for what I was doing). Bu, PHP_Invoker'den bir soruna (ve bazı çıkışlara) neden oldu. Sıkı mod, herhangi bir çıkışa izin vermez.

Okuma/Tersine mühendislik /usr/share/php/pear/share/pear/PHPUnit/Util/Test.php::getSize() (ve aynı sınıfta getGroups()) .. Ben orada anladım

@large // 10 seconds 
@medium // 5 seconds 
@small // 1 second max run time 

Onlar sınıf düzeyinde veya yöntem düzeyinde belirtilebilir: kullanabileceğimiz 3 belgesiz ek açıklamalardır. Issue #490 on the PHPUnit github, sınıf düzeyini ve yöntem düzeyini sağlayarak, bunları karıştırırsanız YMMV'yi sorun. Crozin'in dediği gibi, ayrılan zaman aralıkları sırasıyla 10,5,1 saniyedir. Başka bir çözüm, çağrılan bir işlevin ne kadar süre çalışmasına izin verileceğini (yavaş bilgisayarımda) artırmaktı.

PHP_Invoker
zaman aşımı ile callables çağırma için bir yardımcı sınıf: Burada

sudo vi /usr/share/php/pear/share/pear/PHP/Invoker.php 

Increase line 1 "declare(ticks = 1);" to 
    "declare(ticks = 10);" // or any higher int that meets your needs 

beni çözüm bulmak yardımcı Katı modda hakkındaki bilgilerin bir demet. Bu paket, test zaman aşımlarını katı modda zorlamak için gereklidir. [ PHPUnit Install Instructions] şey iddia yok

Sıkı Modu Testler hiçbir kod kapsama verim eksik eksik Testi olarak işaretlenmiş (veya atlanmış) olan Slideshare by Sebastian Bergmann (slide 10)

Not PHPUnit tüm çıktıyı yutar o
unutmayın Bir testin yürütülmesi sırasında yayılır. Sıkı modda, çıktı veren bir test başarısız olur. Testing output section of PHPUnit Manual

+5

Burada açıklandığı gibi phpunit.xml dosyasında da yaptığınız testler için izin verilen zamanı değiştirin http://stackoverflow.com/a/13722524/1387163 –

31

unutmayın ile başarısız başladı onu açık PHPUnit, bir sınamanın yürütülmesi sırasında yayılan tüm çıktıyı yutar . Sıkı modda, çıktı veren bir test başarısız olur. Hiçbir iddiaların ile

  1. Testler eksik/başarısız olarak işaretlenebilir: Ben belgelerinde Tüm bulabildiğim, ama aynı zamanda kaynakları kontrol ederim ve katı modda bulundu

.

  • Her sınama, boyutuna ve pcntl extension ve PHP_Invoker library'un varlığına bağlı olarak yürütme zaman sınırı ile çalıştırılabilir.

    • timeoutForSmallTests (varsayılan değer: 1)
    • timeoutForMediumTests (varsayılan değer: 10)
    • timeoutForLargeTests (varsayılan değer: 60)

    Test boyutu (küçük üç zaman aşımı değerleri vardır (orta veya büyük) PHPUnit_Util_Test::getSize() yöntemiyle belirlenir:

    • Test durumları descendi PHPUnit_Extensions_Database_TestCase veya PHPUnit_Extensions_SeleniumTestCase numaralı telefonlardan büyüktür.
    • Test senaryoları ve münferit testler, büyük veya orta büyüklükte, sırasıyla, 'büyük' ​​veya 'medyum' groups'a ekleyerek de yapılabilir.
    • Aksi takdirde, test küçüktür.

  • O var katı mod sadece yukarıdaki üç değişiklikleri yapar gibi görünüyor, ama bu konuda kesin olarak emin değilim. Daha önce hiç PHPUnit'in kaynaklarını çalışmadım ya da katı mod kullanmamıştım.

    +1

    +1: Ayrıntılar için çok teşekkür ederiz. – hakre