2011-05-17 36 views
4

在一些地方,我的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 
} 

如何实现上述情况?是否有更好的方法?

+1

是否有一个“更好的方法”取决于*你实际试图达到什么。 – 2011-05-18 01:48:25

回答

3

简短的回答:

@depends只有这样,你必须适用于一个参数:

return array($obj1, $obj2); 

public function testBothFeatures(array $myClasses) { 
    $obj1 = $myClasses[0]; 
    $obj2 = $myClasses[1]; 
} 

较长的答案:

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

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

你想确保你的课程独立于你的应用程序的其他部分工作,所以你可以很容易地发现什么刚好你改变了什么。

如果您有一个班级依赖于另一班级,然后mock out the second class并使用该假对象,以确保您的“受测试的类”工作正常。

+2

一个很好的捷径是使用'list($ obj1,$ obj2)= $ myClasses;' – 2011-05-17 21:37:23

2

这会更有意义,我猜?

return array(
    'obj1' => new Class1(), 
    'obj2' => new Class2() 
);