什么是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章 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |