在下面的示例中,我想模拟 multipliedValue()
内 getBaseValue()
的调用。但我无法弄清楚。
class Sample
{
function multipliedValue()
{
$value = $this->getBaseValue();
return $value * 2;
}
function getBaseValue()
{
return 2;
}
}
我使用了 PHPUnit 模拟,但没有用。因此,我使用了以下代码:
class SampleTest extends PHPUnit_Framework_TestCase
{
function testMultipliedValueIfBaseValueIsFalse()
{
$mockedObject = $this->getMockBuilder(Sample::class)
->setMethods(['multipliedValue', 'getBaseValue'])
->getMock();
$mockedObject->expects($this->any())
->method("getBaseValue")
->willReturn(false);
$result = $mockedObject->multipliedValue();
$this->assertFalse($result);
}
}
我尝试创建一个全局函数,但只强制其中一个方法返回我想要的值,其余的就按原样进行。我应该如何进行这个测试?
我当前收到的错误是针对 multipliedValue()
方法中的 $this
的,该方法将其视为 stub 对象。
最佳答案
->setMethods()
中列出的所有方法都将被 stub 并默认返回 null
,因此如果您只想 stub getBaseValue
> 然后执行:
$mockedObject = $this->getMockBuilder(Sample::class)
->setMethods(['getBaseValue'])
->getMock();
$mockedObject->expects($this->any())
->method("getBaseValue")
->willReturn(false);
$result = $mockedObject->multipliedValue();
$this->assertFalse($result);
关于PHPUnit:如何通过被测方法模拟内部调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47968579/