PHPUnit 테스트에서 Predis 클라이언트를 조롱하려고합니다. 필자가 시도한 메소드를 호출했을 때 PHPUnit은 테스트가 끝나자 기대치를 충족시키지 못했다고 말합니다.Predis Client의 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 번 호출 할 때와 같습니다. 메서드가 실제로 0 번 호출 된 1 번 호출 될 것으로 예상했습니다.
왜? Predis 클라이언트가 redis 명령과 일치하는 메서드 호출에 응답하기 위해 __call을 사용하는 것으로 보입니까?
업데이트 : __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을 사용하는 클래스를 모방하는 더 좋은 방법이 있습니까?
완벽합니다. 감사. –