gpt4 book ai didi

PHPUnit: stub 多个接口(interface)

转载 作者:可可西里 更新时间:2023-11-01 12:48:37 24 4
gpt4 key购买 nike

我正在掌握 PHPUnit,到目前为止发现它非常容易使用,但我遇到了一个给我带来困难的测试用例。

我正在针对一组预期对象实现的接口(interface)(有些是 PHP 的,有些是自制的)编写代码,而 SUT 需要一个输入对象来实现多个接口(interface)。例如:

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)
{
// ...
}
}
}

我可以从一个接口(interface)或另一个接口(interface)创建一个 stub ,但我不知道您是否可以创建一个实现这两个接口(interface)的 stub 。

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);
}

是否可以从接口(interface)列表生成 stub ,或者我是否必须 stub 实现预期接口(interface)的具体类?这本身就造成了困难,因为需要 stub 的类本身需要将另一个对象传递给它的构造函数,而且我似乎无法使 disableOriginalConstructor () 或 setConstructorArgs () 工作我认为这是因为有问题的具体类本身不实现构造函数,而是从父类(super class)继承它。我在这里遗漏了一些明显的东西吗?

最佳答案

对于 future ,如果有人碰巧看到这个答案,这在 PHPUnit 7 中对我有用:

$mock = $this
->getMockBuilder([InterfaceA::class,InterfaceB::class])
->getMock();

关于PHPUnit: stub 多个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com