我正在处理
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()工作我认为这是因为有问题的具体类本身并不实现构造函数,而是从超类继承它.我错过了一些明显的东西吗?