PHPUnit testler için Dizin düzen?

4 Cevap php

Ben bir PHP proje üzerinde çalışan kıdemli bir Java programcısı değilim, ve ben phpunit kalkmaya çalışıyor ve çalışıyorum. Java zaman birim test, bu gibi ayrı dizinlere test durumda sınıfları ve düzenli derslere koymak için yaygındır -

/src  
  MyClass.java

/test  
  MyClassTest.java

ve benzerleri.

Ne zaman PHPUnit ile birim test, aynı dizin yapısını takip için ortak olan, ya da test sınıfları düzenlemek için daha iyi bir yolu var mı? Şimdiye kadar, ben düzgün çalışması için "(MyClass.php") "include" deyimi alabilirsiniz tek yolu aynı dizinde test sınıfı dahil, ama itin zaman test sınıfları dahil etmek istemiyorum üretim.

4 Cevap

Ben bu dosyaları ayrı tutmak iyi bir fikir olduğunu düşünüyorum. Normalde böyle bir klasör yapısını kullanabilirsiniz:

/myapp/src/        <- my classes
/myapp/tests/       <- my tests fveyathe classes
/myapp/public/      <- document root

Senin durumunda, test dosyasında sınıf dahil olmak üzere, neden sadece dahil yöntemine bütün yolu geçemiyor?

include('/path/to/myapp/src/MyClass.php');

veya

include('../src/MyClass.php');

Bunu yaparken include() bunu birim test MyClass.php nerede bilir böylece PHP'nin include_path değiştirmeniz gerekir.

Sen (kendi dahil önceki) test dosyasının en üstünde böyle bir şey olabilir:


set_include_path(get_include_path() . PATH_SEPARATOR . "../src");

Bu ekleme yolu üzerine src dizin ekler ve size test kodundan ayrı gerçek kod tutmak için izin vermelidir.

Brian Phillips'in cevabı benim deneyim, oldukça yeterince gitmez. Sen testleri PHPUnit çalıştırdığınızda, geçerli dizini ne olduğunu bilmiyorum. Yani set_include_path () ifadesi de test sınıf dosyasının mutlak yolunu başvurmak gerekir. Bu gibi:

set_include_path(get_include_path() . PATH_SEPARATOR . 
                        dirname(__FILE__) . "/../src");

Bu fragman kendi başlık dosyası SetupIncludePath.php yerleştirilir ve bir 'Require_oncenin' ile test dosyaları dahil, yani bu test suit patikayı birden çok kez ekleme yok edilebilir.

Ben aynı isimde ama. PHPT uzantılı bir dosyada kaynağının sonraki benim test durumlarda koymak. Dağıtım script basitçe, * filtreler. Phpt onlar üretime bastığınızda.