PHPUnit:对多个接口进行存根

前端之家收集整理的这篇文章主要介绍了PHPUnit:对多个接口进行存根前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在处理 PHPUnit,并且到目前为止发现它很容易使用,但是我遇到了一个导致我遇到困难的测试用例.

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

  1. class MyClass implements ArrayAccess,MyInterface
  2. {
  3. // ...
  4. }

SUT做的事情如下:

  1. class ClassToBeTested
  2. {
  3. protected $obj = NULL;
  4.  
  5. public function __construct ($obj)
  6. {
  7. $this -> obj = $obj;
  8. }
  9.  
  10. public function methodToBeTested ()
  11. {
  12. if ($this -> obj instanceof ArrayAccess)
  13. && ($this -> obj instanceof MyInterface)
  14. {
  15. // ...
  16. }
  17. }
  18.  
  19. public function otherMethodUnderTest ()
  20. {
  21. if ($this -> obj instanceof ArrayAccess)
  22. {
  23. // ...
  24. }
  25. else
  26. if ($this -> obj instanceof MyInterface)
  27. {
  28. // ...
  29. }
  30. }
  31. }

我可以从一个接口或另一个接口创建存根,但我不知道你是否可以创建一个实现它们的存根.

  1. protected function setUp ()
  2. {
  3. $stubField = $this -> getMockBuilder ('ArrayAccess')
  4. -> getMock ();
  5. $this -> object = new ClassToBeTested ($stubField);
  6. }

要么

  1. protected function setUp ()
  2. {
  3. $stubField = $this -> getMockBuilder ('MyInterface')
  4. -> getMock ();
  5. $this -> object = new ClassToBeTested ($stubField);
  6. }

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

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

猜你在找的PHP相关文章