在下面的示例中,我想在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
,它将其视为固执的对象。
->setMethods()
中列出的所有方法将是固定的,默认情况下返回null
,因此,如果您只想存根getBaseValue
,则可以:
$mockedObject = $this->getMockBuilder(Sample::class)
->setMethods(['getBaseValue'])
->getMock();
$mockedObject->expects($this->any())
->method("getBaseValue")
->willReturn(false);
$result = $mockedObject->multipliedValue();
$this->assertFalse($result);