Sahte nesnenin aksine phpunit ile bir sahte sınıf oluşturmanın bir yolu var mı? Bağımlılık enjeksiyonu yapmanın bir yolunu, bir sınıfın yapıcıda (ya da her yerde) çalışmak için ihtiyaç duyabileceği her nesneyi açıkça geçmek zorunda kalmadan araştırıyorum. Tüm bu durumlarda için "doğru" dönecektir şey:Phpunit ile bir alay sınıfı oluşturun?
public function testAAAA()
{
$foo = $this->getMock('foo', array('bar'));
var_dump(class_exists('foo', false));
var_dump(method_exists('foo', 'bar'));
var_dump(method_exists($foo, 'bar'));
}
Bu baskılar:
bool(true)
bool(false)
bool(true)
başarıyla sahte 'foo' sınıfı yarattı ederken bir 'bar bağlamak olmadığını belirten 'ona yöntem.
Phpunit 3.7.5 kullanıyorum.
Bunu yapmak istemediğimi söylemem ama bunu yapmam gerek. Gerçek DI eklemek için on binlerce dosyayı değiştirmeden, testin içinde yapılan çağrılara cevap verecek sahte bir nesne üretebilmem gerekiyor. Bu getMockBuilder yöntemi beni yakınlaştırıyor, ama phpunit adında bir isim sınıfıyla isimlendirildiğinde kötü durum kodu üretiyor gibi görünüyor (orijinal yazılarda belirtmiş olduğum şeyi kullanıyorum). –
'getMock()' çağrısından sonra 'class_alias' 'class_alias' '(' foo ',' quux \ baz ') 'gibi bir çağrı ekleyin ve' quux \ baz 'ile sınayın. Tabii ki, temelde PHPUnit'i ya da ReflectionClass ve ReflectionObject'in bir nesneyi veya sınıfa bir yöntem ekleyebilme yeteneğini kullanabileceğinizi düşündüğünüz noktada ve siz de kenar davalarına vuracaksınız. Bu, PHP'nin parladığı bir alan değil. Ayrıca, eğer okumadıysanız, Michael Feathers'ın “Eskiden Kalıcı Bir Şekilde Çalışma” başlıklı bir kopyasına * ihtiyacınız var. – jeremiahd
Teşekkürler. Class_alias'ı deneyeceğim. Ayrıca, PHPUnit'in yamalarını inceleyerek, bir eval() 'da kullandığı şablonu değiştiriyorum. Kitaba gelince, gerçekten ihtiyacım olan şey, patronların okumasını sağlamak. :) –