我开始使用 PHPUnit 来测试我的代码,但我在理解双重测试方面遇到一些问题。
我尝试存根类方法 b 以在从另一个方法调用时返回 true 而不是通常的行为 (false)
我有这样的代码
class MyClass {
function a()
{
return $this->b();
}
function b()
{
return false;
}
}
class MyClassTest extends TestCase
{
function testAThrowStubB()
{
$myClassStub = $this->getMockBuilder('\MyClass')
->getMock();
$myClassStub->expects($this->any())
->method('b')
->willReturn(true);
// this assert will work
$this->assertTrue($myClassStub->b());
// this assert will fail
$this->assertTrue($myClassStub->a());
}
}
我以为我的第二个断言会起作用,但事实并非如此。我错了,这不可能吗?还有另一种方法可以测试一个依赖于另一个函数来覆盖其行为的函数吗?
Thanks
当您模拟一个类时,PHPUnit 框架期望您模拟整个类。任何未指定任何返回值的方法都将默认返回null
(这就是第二次测试失败的原因)。
如果您想模拟方法的子集,请使用setMethods
功能:
$myClassStub = $this->getMockBuilder(MyClass::class)
->setMethods(["b"])
->getMock();
$myClassStub->expects($this->any())
->method('b')
->willReturn(true);
// this assert will work
$this->assertTrue($myClassStub->b());
// this assert will work too
$this->assertTrue($myClassStub->a());
这在文档中指出例9.11
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)