私は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回呼び出されたときと同じです。 メソッドは1回呼び出され、実際には0回呼び出されると予想されました。
なぜですか?それは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を使用するクラスをモックする良い方法はありますか?
完璧です。ありがとう。 –