我有一个有两个公共方法的类。它看起来像下面这样:
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()
但没有运气。
所以,我想知道是否可以模拟称为内部测试方法的功能?
你需要一个部分模拟(一个模拟对象,其中一些方法被存根,而其余的保持原样)。由于我只对 phpunit 自己的模拟库进行了此操作,因此我只能向您指出文档,但似乎您应该在模拟实例中添加->makePartial()