我正在掌握 PHPUnit,到目前为止发现它非常容易使用,但我遇到了一个给我带来困难的测试用例。
我正在针对一组预期对象实现的接口(一些是 PHP 的,一些是自制的)编写代码,并且 SUT 需要一个输入对象来实现多个接口。例如:
class MyClass implements ArrayAccess, MyInterface
{
// ...
}
SUT 会做这样的事情:
class ClassToBeTested
{
protected $obj = NULL;
public function __construct ($obj)
{
$this -> obj = $obj;
}
public function methodToBeTested ()
{
if ($this -> obj instanceof ArrayAccess)
&& ($this -> obj instanceof MyInterface)
{
// ...
}
}
public function otherMethodUnderTest ()
{
if ($this -> obj instanceof ArrayAccess)
{
// ...
}
else
if ($this -> obj instanceof MyInterface)
{
// ...
}
}
}
我可以从一个接口或另一个接口创建一个存根,但我不知道您是否可以创建一个同时实现这两个接口的存根。
protected function setUp ()
{
$stubField = $this -> getMockBuilder ('ArrayAccess')
-> getMock ();
$this -> object = new ClassToBeTested ($stubField);
}
or
protected function setUp ()
{
$stubField = $this -> getMockBuilder ('MyInterface')
-> getMock ();
$this -> object = new ClassToBeTested ($stubField);
}
是否可以从接口列表生成存根,或者我是否必须存根实现预期接口的具体类?这本身就造成了困难,因为需要存根的类本身需要将另一个对象传递给其构造函数,而我似乎无法让disableOriginalConstructor()或setConstructorArgs()工作我认为这是因为所讨论的具体类本身并不实现构造函数,而是从超类继承它。我在这里遗漏了一些明显的东西吗?
对于未来,如果有人碰巧看到这个答案,这对我在 PHPUnit 7 中有用:
$mock = $this
->getMockBuilder([InterfaceA::class,InterfaceB::class])
->getMock();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)