Próbuję wyszydzić klienta Predis w teście PHPUnit. Kiedy wołam metodę, którą próbowałem wyśmiewać, pod koniec testu PHPUnit mówi mi, że oczekiwania nie zostały spełnione.Dlaczego mój proces PHPUnit nie jest zgodny z oczekiwaniami klienta Predis?
Oto przykładowy kod, który reprodukuje mój problem:
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");
}
}
I PHPUnit uważa, że sposób ten nie został nazwany:
1) MockRedisTest :: testMockRedis Oczekiwanie zawiodły dla nazwy metody jest równa, gdy wywołano 1 raz (y). Spodziewano się, że metoda będzie wywoływana 1 raz, faktycznie nazywana 0 razy.
Dlaczego? Czy to dlatego, że klient Predis wydaje się używać __call do odpowiadania na wywołania metod pasujące do poleceń redis?
AKTUALIZACJA: Odnoszę wrażenie, że ma to coś wspólnego z metodą __call. Zmiana kodu na to działa:
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");
}
Nie jestem pewien, czy jestem z tego zadowolony. Czy istnieje lepszy sposób kpić klas, które używają __call do metod proxy?
Perfect. Dzięki. –