phpunit - 将两个对象返回到下一个测试用例

CM.*_*CM. 5 php phpunit

在某些地方,我的 phpunit 方法依赖于两个类,因此我决定编写一个专用方法,该方法将创建这两个类(彼此相关)的实例并将它们传递给所有 phpunit 方法。我想做类似下面的事情。

public function testGetInstance()  
{  
    $obj1 = new Class1();  
    $obj2 = new Class2();  
    return $obj1, $obj2;  //can i use list  ?  
}    

/**  
*@depends testGetInstance()  
*/  
public function testBothFeatures(Class1 $obj1, Class2 $obj2) //how to pass 2 instances?      
{  
    //Do all operation related to $obj1 and $obj2  
}
Run Code Online (Sandbox Code Playgroud)

如何实现上述情况?有没有更好的方法呢?

edo*_*ian 4

简短的回答:

@depends仅适用于一个参数,因此您必须:

return array($obj1, $obj2);

public function testBothFeatures(array $myClasses) {
    $obj1 = $myClasses[0];
    $obj2 = $myClasses[1];
}
Run Code Online (Sandbox Code Playgroud)

更长的答案:

你在那做什么?您是否使用一个 PHPUnit 测试用例来测试两个真实的类?

如果是这样,那就是你通常应该避免的事情。唯一的例外是,您可能正在进行“集成”测试,以确保代码的较大部分能够协同工作,但只有在对每个类进行单元测试后才应该这样做。

您希望确保您的类独立于应用程序的其他部分工作,以便您可以轻松地发现当您更改某些内容时到底破坏了什么。

如果您有一个依赖于另一个类的类,那么mock out the second class请使用该假对象来确保您的“被测类”正常工作。

  • 一个不错的快捷方式是使用“list($obj1, $obj2) = $myClasses;” (2认同)