PHPUnit ile statik sınıfları test

2 Cevap php

Ben test etmek çalışıyorum sınıfları bir dizi var. Sınıf A veritabanları ile rastgele şeyler ve şeyler yapmak işlevleri içeren Sınıf X. Sınıf X bağlıdır. Ben bağımlılıklar olmadan A Sınıfı test etmek için ben bunu istiyorum tam olarak ne verir Class X sahte bir versiyonunu yarattık.

Yani, benim soru zaten aynı ad ve dosya adına sahip sahte sürümünü dahil ettik olarak nasıl şimdi Class X sınarım vardır. Ben "Class X Redeclare" hatası alıyorum.

Ben test altında benim sınıf içine söndürdü nesne geçmek için yolu yok gibi taslakları kullanın sanmıyorum. Testi (Sınıf A) altında sınıfı statik bir sınıf örneğine (ClassA :: getInstance () ;) isteyecektir.

Bu I Sınıf X'in sahte sürümünü içeren bir dosyayı un-içeremez olarak test suit veya test durumlarda ile ilgili bir şey olacak

Yardımlarınız için şimdiden teşekkürler,

Mikrofon

2 Cevap

Sen uninclude dosyaları / PHP sınıfları, yani sınıflar yapamam farklı isimler kullanmak gerekir ya da bunları namespace gerekir. Bir saplama sınıfını kullanarak gelince, siz kullanabilirsiniz iki yaklaşım vardır. Dependancies içeren bir örnek / sınıf değişkeni kullanın, böylece onları dışarı takas edebilirsiniz. Gibi

self::$_classes['classA']::methodCall();
$this->_classes['classA']::methodCall();

Bu gerçekten statiği gerekirse zamanında sınıf dependancies değiştirmek izin verir. Diğer bir yaklaşım statik sınıfları kullanmak ve symfony bileşenleri bulundu gibi bir dependancy injection container değil kullanmaktır. Bir enjeksiyon konteyner yanı gerektiği gibi mocks enjekte izin istiyorum.

Test altında benim sınıfa söndürdü nesne geçmek için hiçbir yolu yoktur.

Bu A sınıfı şiddetle Sınıf X başvuran demektir? Şahsen ben istiyorum bir real mockup (örneğin X_MockUp) bir test klasör hiyerarşisinde koymak ve daha sonra A sınıfı onu geçmek için Sınıf X maketini yeniden adlandırmak için tavsiye ederim testi. Bu şu anda mümkün değil, ama daha sonra mimari değişebilir! Bu, daha esnek ve testable-friendly olacaktır.

Eğer onları ayırt etmek zorunda kalan iki dosya aynı sınıf adını olduğu gibi bu hatayı alıyorum.