SORU
29 Kasım 2011, Salı


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
29 Kasım 2011, Salı


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ıstrictbu modu git ve bir daha kapat.

Örnek bakmak için projeler

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ArkticPlanet

    ArkticPlanet

    9 ŞUBAT 2010
  • BurnedInDotCom

    BurnedInDotC

    3 NİSAN 2010
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011