2013-04-22 69 views
2

@depends註釋允許測試之間表達的依賴關係:是否可以使用@depends返回多個值?

class MyTest extends \PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     // ... 

     return $client; 
    } 

    /** 
    * @depends testOne 
    */ 
    public function testTwo(Client $client) 
    { 
     // ... 
    } 
} 

如果我想返回幾個值,我可以返回值的數組,如:

class MyTest extends \PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     // ... 

     return array($client, $node); 
    } 

    /** 
    * @depends testOne 
    */ 
    public function testTwo(array $items) 
    { 
     list ($client, $node) = $items; 

     // ... 
    } 
} 

雖然它的工作原理很好,這種方法的問題是我失去了我的IDE的類型提示,並且必須手動註釋變量$client$node,以便它正確理解它們。

我想該怎麼做,是明確地使用返回值作爲獨立的參數在第二次測試:

class MyTest extends \PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     // ... 

     return array($client, $node); 
    } 

    /** 
    * @depends testOne 
    */ 
    public function testTwo(Client $client, Node $node) 
    { 
     // ... 
    } 
} 

這可能嗎?

回答

0

我看了一會兒回來,我想答案是否定的。這比任何事情都更清晰。由於PHP只允許您返回一個變量,因此您需要在PHPUnit級別引入額外的註釋邏輯,以告訴它您返回的內容不是一個值,而是一組值。

在旁註中我發現使用@depends返回對象可能會變得棘手。例如,如果您有兩個測試,都取決於集說@depends createUser。結果是一個參考。然後testOne更改提供的用戶對象,因爲它是參考testTwo現在將獲得已更改的用戶對象。

我本來以爲@depends返回值的想法是真棒,但在實踐中,我停止使用它。

+0

看起來像你說得對,我還沒有找到一個解決辦法,因爲我自己我問這個問題。我現在已經設法只通過一個參數傳遞給下一個測試,依賴於'@ depends',並且注意不要根據給定的測試進行多個測試,以避免您提到的參考問題! – Benjamin 2013-04-30 21:41:40

+0

'@ depends'絕對是一個救星,雖然:我在做功能測試與虛擬瀏覽器,並通過從測試的瀏覽器進行測試,分別加載一個頁面,接下來的測試通過一個參考瀏覽器的預期頁。如果測試失敗,所有依賴它的後續測試都會被跳過! – Benjamin 2013-04-30 21:46:17

+0

我100%同意,我愛@depends。這只是我不再使用的價值。 – SamHennessy 2013-05-01 02:43:45

相關問題