加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

什么是PHPUnit测试的存根功能的正确方法?

发布时间:2020-12-13 22:29:11 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试为连接到API的类编写一些单元测试. 我想要做的是改变类,以便不是实际连接到API,而是加载一个预先获取的常量夹具.实际执行cURL请求并返回数据的类中的方法受到保护,这是我想要更改的那个而不是返回fixture文件的内容. 我的问题是,最好的方法是什么
我正在尝试为连接到API的类编写一些单元测试.

我想要做的是改变类,以便不是实际连接到API,而是加载一个预先获取的常量夹具.实际执行cURL请求并返回数据的类中的方法受到保护,这是我想要更改的那个而不是返回fixture文件的内容.

我的问题是,最好的方法是什么?

我在PHPUnit中读过关于模拟对象的内容,但是因为我想要更改的方法是内部的和受保护的,我不认为我可以使用它们吗?

我是否正确假设我需要扩展类并自己更改方法?

谢谢.

解决方法

Mocks和Stubs的目的是取代依赖于依赖性的功能,例如:当你有类似的东西

class Foo
{
    public function __construct($apiConnector) {
        $this->apiConnector = $apiConnector
    }
}

其中$apiConnector是用于调用API的依赖项,然后使用您自己的实现来存根或模拟该依赖项.由于该依赖关系是通过Foo的公共面向接口调用的,因此您可以在依赖关系中存根触发受保护方法的方法.

但是,如果没有依赖关系,但是对API的调用是从testclass进行的,那么你必须编写一个自定义类来扩展你的testclass并实现它自己的API调用函数,例如:

class FooMock extends Foo
{
    protected function queryAPI()
    {
        return $fixture;
    }
}

然后,您将测试此类而不是实际的类.

如果您的类实际连接到WebService,请参阅第Stubbing and Mocking WebServices章

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读