2011-05-17 70 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() 
);