我正在尝试创建一个非常标准的单元测试,我在其中调用一个方法并断言它的响应,但是我正在测试的方法在同一个类中调用另一个方法,这会带来一些繁重的工作。
我想模拟一个方法,但仍然按原样执行我正在测试的方法,仅使用从调用另一个方法返回的模拟值。
我已经简化了示例以使其尽可能简单。
class MyClass
{
// I want to test this method, but mock the handleValue method to always return a set value.
public function testMethod($arg)
{
$value = $arg->getValue();
$this->handleValue($value);
}
// This method needs to be mocked to always return a set value.
public function handleValue($value)
{
// Do a bunch of stuff...
$value += 20;
return $value;
}
}
我尝试编写测试。
class MyClassTest extends \PHPUnit_Framework_TestCase
{
public function testTheTestMethod()
{
// mock the object that is passed in as an arg
$arg = $this->getMockBuilder('SomeEntity')->getMock();
$arg->expects($this->any())
->method('getValue')
->will($this->returnValue(10));
// test handle document()
$myClass = new MyClass();
$result = $myClass->testMethod($arg);
// assert result is the correct
$this->assertEquals($result, 50);
}
}
我曾尝试模拟 MyClass 对象,但是当我这样做并调用 testMethod 时,它总是返回 null。我需要一种方法来模拟一个方法,但保持对象的其余部分完好无损。