मुझे एक ओवरलोडेड __get ($ अनुक्रमणिका) विधि का मज़ाक करने में समस्या है। के लिए वर्ग मज़ाक उड़ाया जा करने के लिए कोड और परीक्षण के अंतर्गत प्रणाली है कि यह इस प्रकार है की खपत: इस प्रकारPHPUnit: __get() में परिणाम "__get() में परिणाम वास्तव में 1 तर्क लेना चाहिए ..."
<?php
class ToBeMocked
{
protected $vars = array();
public function __get($index)
{
if (isset($this->vars[$index])) {
return $this->vars[$index];
} else {
return NULL;
}
}
}
class SUTclass
{
protected $mocky;
public function __construct(ToBeMocked $mocky)
{
$this->mocky = $mocky;
}
public function getSnack()
{
return $this->mocky->snack;
}
}
टेस्ट दिखता है:
<?php
class GetSnackTest extends PHPUnit_Framework_TestCase
{
protected $stub;
protected $sut;
public function setUp()
{
$mock = $this->getMockBuilder('ToBeMocked')
->setMethods(array('__get')
->getMock();
$sut = new SUTclass($mock);
}
/**
* @test
*/
public function shouldReturnSnickers()
{
$this->mock->expects($this->once())
->method('__get')
->will($this->returnValue('snickers');
$this->assertEquals('snickers', $this->sut->getSnack());
}
}
रियल कोड थोड़ा और अधिक जटिल है, हालांकि ज्यादा नहीं, अपने माता-पिता वर्ग में "getSnacks()" है। लेकिन यह उदाहरण पर्याप्त होना चाहिए।
समस्या मैं निम्नलिखित त्रुटि मिलती है, जब PHPUnit के साथ परीक्षण को क्रियान्वित:
Fatal error: Method Mock_ToBeMocked_12345672f::__get() must take exactly 1 argument in /usr/share/php/PHPUnit/Framework/MockObject/Generator.php(231)
जब मैं मैं भी परीक्षा पद्धति नहीं पहुँच सकते हैं डिबग। ऐसा लगता है कि यह नकली वस्तु को स्थापित करने में टूट जाता है।
कोई विचार?
ठीक है, मैंने थोड़ा और परीक्षण किया। वास्तव में मॉक क्लास के निर्माण में समस्या प्रतीत होती है। यदि मैं इसे -> setMethods (सरणी ('blabla') के साथ बना देता हूं) वह परीक्षण विधियों तक पहुंच जाता है। अगर मैं -> setMethods (सरणी ('__ get') का उपयोग करता हूं तो वह टूट जाता है। – beToiba
आप सही हैं - समस्या यह है कि पीएचपी मॉक ऑब्जेक्ट्स कैसे नकली उत्पन्न कर रहा है - नीचे दिए गए उत्तर में से कोई भी इसका समाधान नहीं करता है। मुझे यह समस्या PHPUnit 4.0 में मिल रही है - आप किस संस्करण का उपयोग कर रहे हैं? – HorusKol
मैंने PHPUnit के संस्करणों के विभिन्न संयोजनों के साथ इसे फिर से बनाने की कोशिश की है और यह नवीनतम संस्करण से उपलब्ध मॉक ऑब्जेक्ट निर्भरता (लेखन के समय 4.8.2) PHPUnit 3.5 पर वापस ले जाया गया है, और इसे मेरे तरीके से तोड़ने के लिए नहीं मिल सकता पर्यावरण - उबंटू 12.04.5 एलटीएस पर PHP 5.5। जब तक मूल पोस्टर इस प्रश्न पर विस्तार नहीं कर सकता है, तो वे जिन संस्करणों का उपयोग कर रहे थे, उनके संयोजन को याद करते हुए, मैं अनुशंसा करता हूं कि यह प्रश्न बंद हो। – Benjamin