PHPUnit:对多个接口进行存根

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHPUnit:对多个接口进行存根脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在处理 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()工作我认为这是因为有问题的具体类本身并不实现构造函数,而是从超类继承它.我错过了一些明显的东西吗?

您是否有权编辑原始代码?如果是这样,我将创建一个扩展ArrayAccess和MyInterface的新接口.这样你就可以存根/模拟一个对象来测试被测方法.

脚本宝典总结

以上是脚本宝典为你收集整理的PHPUnit:对多个接口进行存根全部内容,希望文章能够帮你解决PHPUnit:对多个接口进行存根所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。