मैं PHPUnit परीक्षण में प्रिडिस क्लाइंट को नकल करने की कोशिश कर रहा हूं। जब मैं विधि को कॉल करता हूं तो मैंने परीक्षण करने के लिए प्रयास किया है, परीक्षण के अंत में 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 अपेक्षा विफल
यहाँ एक कोड नमूना है कि मेरी समस्या reproduces है विधि नाम के लिए 1 बार (ओं) के लिए बराबर होने के बराबर है। विधि को 1 बार कहा जाने की उम्मीद थी, जिसे वास्तव में 0 बार कहा जाता था।
क्यों? क्या ऐसा इसलिए है क्योंकि प्रिडीस क्लाइंट रेडिस कमांड से मेल खाने वाली विधि कॉल का जवाब देने के लिए __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 का उपयोग करने वाले वर्गों का नकल करने का कोई बेहतर तरीका है?
बिल्कुल सही। धन्यवाद। –