PHPUnit:如何通过测试中的方法模拟内部调用的函数
在下面的示例中,我想模拟PHPUnit:如何通过测试中的方法模拟内部调用的函数,php,unit-testing,mocking,phpunit,Php,Unit Testing,Mocking,Phpunit,在下面的示例中,我想模拟multipledvalue()中的getBaseValue()调用。但我想不出来 class Sample { function multipliedValue() { $value = $this->getBaseValue(); return $value * 2; } function getBaseValue() { return 2; } } 我用过PHPUnit嘲弄
multipledvalue()
中的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);
}
}
我试图创建一个全局函数,但只强制其中一个方法返回我想要的值,其余的就按原样执行。我应该如何进行这个测试
我当前遇到的错误是
multipledValue()
方法中的$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);
这样做会导致错误
未定义的方法SampleTest::getBaseValue()
,因为getBaseValue()
是由multipledValue()
函数在内部调用的。不,您是对的。我犯了一个错误。非常感谢