Я пытаюсь смоделировать клиента Predis в тесте PHPUnit.Когда я вызываю метод, который пытался смоделировать, в конце теста PHPUnit сообщает мне, что ожидание не было удовлетворено.
Вот пример кода, который воспроизводит мою проблему:
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");
}
}
И PHPUnit считает, что метод не был вызван:
1) Ошибка MockRedisTest :: testMockRedis для имени метода равна, когда он вызывается 1 раз (с)).Ожидается, что метод будет вызван 1 раз, фактически вызван 0 раз.
Почему?Это потому, что клиент Predis, по-видимому, использует __call для ответа на вызовы методов, соответствующие командам redis?
ОБНОВЛЕНИЕ: У меня сложилось впечатление, что он как-то связан с методом __call.Изменение кода на это работает:
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");
}
Не уверен, что я доволен этим, хотя.Есть ли лучший способ для имитации классов, которые используют __call для прокси-методов?