我有一个抽象类,它有一个抽象方法和一个具体方法。
具体方法调用抽象方法并使用其返回值。
如何嘲笑此返回值?
所以抽象类是
abstract class MyAbstractClass
{
/**
* @return array()
*/
abstract function tester();
/**
* @return array()
*/
public function myconcrete()
{
$value = $this->tester(); //Should be an array
return array_merge($value, array("a","b","c");
}
}
我想测试myconcrete方法,所以我想模拟test的返回值 - 但是在方法内部调用它?
这可能吗?
答案 0 :(得分:3)
是的,这是可能的。您的测试应该如下所示:
class MyTest extends PHPUnit_Framework_TestCase
{
public function testTester() {
// mock only the method tester all other methods will keep unchanged
$stub = $this->getMockBuilder('MyAbstractClass')
->setMethods(array('tester'))
->getMock();
// configure the stub so that tester() will return an array
$stub->expects($this->any())
->method('tester')
->will($this->returnValue(array('1', '2', '3')));
// test myconcrete()
$result = $stub->myconcrete();
// assert result is the correct array
$this->assertEquals($result, array(
'1', '2', '3', 'a', 'b', 'c'
));
}
}
请注意,我正在使用PHPUnit 3.7.10