2014-12-27 36 views
0

我有以下方法返回自身以允許方法鏈接。

class MyClass 
{ 
    public function myMethod() 
    { 
     // Do something 

     return $this; 
    } 
} 

現在,當我測試這種方法,它都沒關係。但PHPUnit代碼覆蓋率告訴我最後一行,即return,沒有經過測試:事實上,「return $ this」這一行用紅色標出,而。

在我的測試中,我已經用它來測試該方法返回本身:

public function testMyMethod() 
{ 
    $myClass = new MyClass; 

    // Test that returns true if properly set 
    $result = $myClass->myMethod(); 

    $this->assertInstanceOf('MyClass', $result); 
} 

測試顯然已過,但回線路曾標記爲紅色和覆蓋率報告告訴該方法是不充分測試。

我如何到達「全部綠色」欄?

+3

如果您的測試目標只是爲了獲得「全部綠色」欄,那麼您沒有正確測試 –

+1

只要您知道您已經正確測試過,那就沒有問題。軟件不能識別你已經測試過的事實並不是你的問題。 100%的代碼覆蓋並不意味着代碼是正確的。我喜歡單元測試。 –

回答

0

@Mark Ba​​ker和@Ryan Vincent,正如你所指出的那樣,測試只是爲了達到「綠色酒吧」不是一個好習慣:我知道。

無論如何,報告會更好地理解一個班級的「健康」。

我沒有在單元測試中導航(這是我第一次真正嘗試在真實項目中使用它),但我讀了很多關於它的內容並發現了相同的想法:測試測試不是好東西。好的,我們都同意這一點。我的問題來自另一個考慮:如果單元測試對於有一個「健康」代碼基礎是有用的,我認爲這也是有用的,當這個代碼是共享的(或當我會在很長時間後重新:我使用了很多評論!):另一個開發者可以看到我做了什麼,我寫了哪些測試,並決定自己測試更多。

因此,看到一個「不綠色的酒吧」,導致新的開發人員檢查代碼,看他是否可以改進測試,只發現它尚未測試,並且「不完整的酒吧」是由簡單的「問題」(一般來說),實際上是微不足道的。

在我看來,這是浪費時間:這是讓我達到「綠色酒吧」的原因。

無論如何,回到問題,我想我已經找到了問題的原因。 $ this的返回對於使方法能夠彼此鏈接很有用。 所以,我沒有達到綠色條,因爲我的測試沒有鏈接這些方法,所以「回報$ this」從未測試過。

當我測試了一些其他使用這些「未完全測試」方法的鏈接的方法,那麼也返回「返回$ this」行作爲測試結果。

這使我達到了綠色的酒吧!現在我已經知道了,而且我也確定測試測試也適用於鏈接工作(這是一件好事)。

+0

感謝您的回答 - 它會幫助我們。 - **新年快樂** :-) –