PHPUnit:对多个接口进行存根
发布时间:2020-12-13 18:03:42 所属栏目:PHP教程 来源:网络整理
导读:我正在处理 PHPUnit,并且到目前为止发现它很容易使用,但是我遇到了一个导致我遇到困难的测试用例. 我正在编写针对一组接口的代码,这些接口需要实现对象(一些PHP,一些是自制的),而SUT需要一个输入对象来实现多个接口.例如: class MyClass implements ArrayAc
我正在处理
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的新接口.这样你就可以存根/模拟一个对象来测试被测方法.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |