PHPUnit testleri organize etmek için en iyi uygulamalar
Şu anda bir proje için phpunit testleri ile sıfırdan başlayacağım. Bazı projeler araştırıyordum (Çalışabilir gibi) şeyler yapıyorlar ve onların testleri düzenlemek nasıl görmek için.
Birçok şey test paketlerini düzgün bir şekilde nasıl organize olduğu ile ilgili bazı sorunları var çok açık, tek şey vardır.
Çalışabilir Diğerleri suites test hangi bir AllTests.php vardır.
Sert bakıyor sınıfı kullanan PHPUnit_Framework_TestSuite
oluşturmak için bir nesne suite ve sonra Ekle diğer suites, ama eğer ben bak PHPUnit dokümanlar için düzenleme testlerde PHPUnit sürümleri sonra 3.4 orada sadece bir açıklama için XML veya FileHierarchy. Bir test düzenlemek için sınıfları kullanılarak çıkarıldı.
Bu yöntem önerilmiyor şey bulamadım Firefox, Microsoft'un hala kullanıyor gibi projeler.
Ama eğer onaylanmaz ise, nasıl xml yapılandırma ile aynı yapıda testleri organize etmek mümkün olacaktır? Tüm testleri yürütülüyor sorun değil, ama nasıl eğer sadece birkaç test yürütmek istiyorsa testleri (xml) düzenlemek istiyorum. Sadece birkaç test belirttiğiniz birkaç xmls oluşturma test paketi çalıştırmak için/belki de?
Eğer öyleyse isteyeceğim tek test module1 ve module2 uygulama, benim ekstra bir xml için her tanımlama ve test paketleri için sadece bu modülleri (sınıflar tarafından kullanılan modül). Ve tüm testler için bir test paketi tanımlayan da bir?
Ya da özel testler @group
ek açıklama ya da onları module1 module2 için işaretlemek için kullanmak daha mı iyi olur?
Bazı en iyi uygulamaları için beni işaret için şimdiden teşekkür ederiz.
CEVAP
El ile bağlama ve daha sonra sahada ne gördüm ne de duydum ne girerek başlangıç yapacağım.
Organizing phpunit test suites
Modülü / dosya sisteminde klasör organizasyon Testi
Tavsiye yaklaşımımı bir xml yapılandırma dosyası sistemi sunmaktadır.
tests/
\ unit/
| - module1
| - module2
- integration/
- functional/
basit: phpunit.xml
ile
<testsuites>
<testsuite name="My whole project">
<directory>tests</directory>
</testsuite>
</testsuites>
eğer istersen testsuites bölebilirsiniz ama bir proje seçimi proje bu.
Çalışan phpunit
sonra TÜM testleri çalıştırır ve phpunit tests/unit/module1
çalışan module1 tüm testler olacak.
Bu organizasyonu "birim" klasör
En yaygın yaklaşım burada tests/unit/
klasör yapısı source/
dizin yapısını yansıtacak.
Benim kitabımda iyi bir yaklaşım, bu yüzden ProductionClass neyse başına bir TestClass.
Dosya organizasyonu
- Dosya başına bir sınıf.
Eğer bu tuzaktan kaçınmak dosyası yani birden fazla test sınıf varsa zaten işe gitmiyor.
- Test bir ad yok
Sadece yapar yazılı test daha ayrıntılı olarak gereken ek bir kullanım ifadesi çok isterdim ki testClass gitmeli aynı ad olarak üretim sınıfı ama hiçbir şey PHPUnit güçleri sana. Sadece hiçbir dezavantajı ile daha kolay buldum.
Sadece birkaç test yürütülüyor
Örneğin phpunit --filter Factory
phpunit tests/unit/logger/
her şey ile ilgili günlük çalışırken her FactoryTests yürütür.
Sorun numaraları, hikayeler falan gibi bir şey @group
etiketleri kullanabilirsiniz ama "klasörü kullanırdım düzeni. modülleri
Birden fazla xml dosyaları
Eğer sahip olmak istiyorsanız birden çok xml dosyaları oluşturmak için yararlı olabilir:
- kod güvencesi olmadan
- sadece bu birim için bir test (ama işlevsel ya da entegrasyon veya uzun süren testler için değil)
- diÄŸer ortak "" durumlarda . filtre
- Örneğin PHPBB3 MU
their phpunit.xmls
Testleriniz için kod kapsamı
Testleri ile yeni bir proje başlatılması ile ilgili olarak:
- Benim önerim
@covers
etiketler like described in my blog (Sadece birim testleri için, her zaman olmayan tüm kamu işlemlerini, her zaman etiketleri kapsar. - Entegrasyon testleri için kapsama alanı oluşturmak yok. Size yanlış bir güvenlik duygusu verir.
- Her zaman rakamlar yalan söyleme yani üretim kodu eklemek için beyaz liste kullanın!
Test sonuçlarınız özdevinimli önyükleme
Testleriniz için otomatik yükleme her türlü ihtiyacın yok. PHPUnit o ilgilenecek.
<phpunit bootstrap="file">
öznitelik test bootstrap belirtmek için kullanın. tests/bootstrap.php
bunu yapmak için güzel bir yer. Orada uygulamalarınızı otomatik yükleyici ve (veya uygulamaları bu konuda bootstrap Ara) bu kadar ayarlayabilirsiniz.
Özet
- Hemen hemen her şey için xml yapılandırma kullanın
- Birim ve entegrasyon testleri ayrı
- Birim test klasörleri, uygulamaları klasör yapısını yansıtacak
- Sadece specif testleri yürütmek için kullanın
phpunit --filter
phpunit tests/unit/module1
- Kullanımı
strict
bu modu git ve bir daha kapat.
Örnek bakmak için projeler
- Sebastian Bergmanns "Bank Account" example project
- phpBB3 onların mirası ile mücadele etmek zorundalar bu yüzden Bile ;)
- Symfony2
- Doctrine2
&; Web arayüzü" PHPUnit testleri ...
Nasıl özel yöntemleri, alanları veya i...
Bir dize kontrol etmek için nasıl &quo...
Nasıl iPhone SDK üzerinde etkin bir İn...
Nasıl Server tablo sütun olup olmadığı...