【发布时间】:2012-01-22 13:41:20
【问题描述】:
我开始掌握 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);
}
或
protected function setUp ()
{
$stubField = $this -> getMockBuilder ('MyInterface')
-> getMock ();
$this -> object = new ClassToBeTested ($stubField);
}
是否可以从接口列表生成存根,或者我必须存根实现预期接口的具体类?这本身就造成了困难,因为需要存根的类本身需要另一个对象传递给它的构造函数,而且我似乎无法让 disableOriginalConstructor () 或 setConstructorArgs () 工作我认为这是因为有问题的具体类本身并不实现构造函数,而是从超类继承它。我在这里遗漏了一些明显的东西吗?
【问题讨论】:
标签: php interface phpunit stub