PHPUnit:如何通过测试方法模拟内部调用的函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHPUnit:如何通过测试方法模拟内部调用的函数相关的知识,希望对你有一定的参考价值。
在下面的例子中,我想模仿在getBaseValue()
中调用multipliedValue()
。但我无法弄明白。
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);
}
}
我试图创建一个全局函数,但只强制其中一个方法返回我想要的值,其余的就像它们一样。我应该如何进行这项测试?
我目前得到的错误是$this
方法中的multipliedValue()
,它将其视为存根对象。
答案
->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);
以上是关于PHPUnit:如何通过测试方法模拟内部调用的函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHPUnit 中跨多个测试模拟测试 Web 服务?