Я пытаюсь создать довольно стандартный unit test, где я вызываю метод и утверждаю его ответ, однако метод, который я тестирую, вызывает другой метод внутри того же класса, который делает немного тяжелый подъем.
Я хочу издеваться над этим методом, но все равно выполняю метод, который я тестирую как есть, только с посмеянным значением, возвращенным из вызова другому методу.
Я проглотил этот пример, чтобы сделать его максимально простым.
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. Мне нужен способ издеваться над одним методом, но остальная часть объекта не повреждена.