phpunit 测试方法,调用其他需要 mock 的类方法
我试图创建一个非常标准的单元测试,我调用一个方法并断言它的响应,但是我正在测试的方法在同一类中调用另一个方法,这有点繁重的工作。
我想模拟一个方法,但仍然按原样执行我正在测试的方法,仅使用从对另一个方法的调用返回的模拟值。
我已经把这个例子弄得一团糟,让它变得尽可能简单。
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。我需要一种方法来模拟一种方法,但保持对象的其余部分不变。