我有一个有两个公共方法的类。它看起来像下面这样:
class IntRequest
{
public function updateStatus()
{
$isValid = $this->checkValidity();
// ... next is a complex logic that use $isValid
}
/**
* @return bool
*/
public function isValid()
{
// another complex logic
}
}
我需要测试第一个函数 - IntRequesr::updateStatus
;但是我需要运行测试。由于IntRequests::isValid
false
返回true
,第二个IntRequests::isValid
返回IntRequests::isValid
我尝试模拟该函数,但测试运行时调用实际的$intRequest = new IntRequests;
$mock = m::mock($intRequest);
$mock->shouldReceive('isValid')
->once()
->andReturn(true);
$res = $mock->updateStatus();
$this->assertTrue($res);
而非模拟的。
我的测试代码是
$res = $intRequest->updateStatus()
我尝试拨打$res = $mock->updateStatus()
而不是{{1}},但没有运气。
所以,我想知道是否可以模拟在测试方法中调用的函数?
答案 0 :(得分:1)
你需要一个partial mock(一个模拟对象,其中一些方法是存根的,而其余方法保留原样)。由于我只使用phpunit自己的模拟库完成了这个,我只能指向你的文档,但似乎你应该只将->makePartial()
添加到你的模拟实例中