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.