Predis istemcisini bir PHPUnit testinde alay etmeye çalışıyorum. Anlatmaya çalıştığım yöntemi çağırdığımda, PHPUnit testin sonunda beklentinin karşılanmadığını söylüyor.Neden PHPUnit Predis İstemcimden beklentilerimi eşleştirmiyor?
class MockRedisTest extends \PHPUnit_Framework_TestCase {
private $mockRedis;
public function testMockRedis() {
$mockRedis = $this->getMock('Predis\\Client');
$mockRedis->expects( $this->once())
->method("exists")
->with($this->equalTo("query-key"))
->will($this->returnValue(true));
$mockRedis->exists("query-key");
}
}
Ve PHPUnit yöntemi çağrılmadı düşünüyor:
1) MockRedisTest :: testMockRedis Beklenti İşte
sorunumu yeniden üreten bir kod örneği var yöntem adı için 1 kez çağrıldığında eşittir. Yöntemin 1 kez çağrılması, aslında 0 kere çağrılması bekleniyordu.
Neden? Predis istemcisinin, redis komutlarıyla eşleşen yöntem çağrılarına yanıt vermek için __call kullandığı anlaşılıyor mu?
GÜNCELLEME: __call yöntemiyle ilgili bir şey olduğu izlenimini ediniyorum. Bu işin kodunun değiştirilmesi:
public function testMockRedis() {
$mockRedis = $this->getMock('Predis\\Client');
$mockRedis->expects( $this->once())
->method("__call")
->with("exists", $this->equalTo(array("query-key")))
->will($this->returnValue(true));
$mockRedis->exists("query-key");
}
Bu konuda memnun olduğumdan emin değilim. Proxy yöntemlerine __call kullanan sınıflar alay etmek için daha iyi bir yolu var mı?
Mükemmel. Teşekkürler. –