Sınıfta Foo
için birim testleri inşa ediyorum ve ben birim test için oldukça yeni.
Benim sınıf temel bileşeni Bar
nesnelerin sayısını içeren BarCollection
bir örneğidir. Bir toplama yoluyla Foo
dolaşır içinde yöntem ve koleksiyonunda her Bar
nesne üzerinde bir çift yöntemlerini çağırır. Ben benim test sınıf için tepkilerin bir dizi oluşturmak için saplama nesneleri kullanmak istiyorum. Nasıl ben yineleme gibi Bar
saplama sınıf farklı değerler döndürür yapabilirim? Ben bu satırlar boyunca bir şey yapmaya çalışıyorum:
$stubs = array();
foreach ($array as $value) {
$barStub = $this->getMock('Bar');
$barStub->expects($this->any())
->method('GetValue')
->will($this->returnValue($value));
$stubs[] = $barStub;
}
// populate stubs into `Foo`
// assert results from `Foo->someMethod()`
Yani Foo->someMethod()
o Bar
nesnelerden aldığı sonuçlara göre veri üretecektir. Dizi bir daha uzun olduğunda, ancak bu bana aşağıdaki hatayı veriyor:
There was 1 failure:
1) testMyTest(FooTest) with data set #2 (array(0.5, 0.5))
Expectation failed for method name is equal to <string:GetValue> when invoked zero or more times.
Mocked method does not exist.
/usr/share/php/PHPUnit/Framework/MockObject/Mock.php(193) : eval()'d code:25
Ben bir düşünce, bir geri çağrı yöntemini çağırmak için ->will($this->returnCallback())
kullanmak için, ama çağrıyı yapıyor Bar
nesne geri arama göstermek (ve dolayısıyla ne yanıt nasıl bilmiyorum ) elde edildi.
Başka bir fikir vb 1. ilk kez, 2 ikinci kez dönmek, benim saplama anlatmak için, onConsecutiveCalls()
yöntemini, ya da bunun gibi bir şey kullanmak için, ama ben bunu tam olarak nasıl emin değilim. Ben de benim sınıf şimdiye koleksiyonu emretti tekrarında başka bir şey yaparsa, ben bunu test etmek için bir yol olmayacağını endişeleniyorum.