2011-05-05 94 views
5

我是TDD的新手,但我不確定爲什麼要測試一個接口?測試界面有意義嗎?

下面的代碼是否合理?

public interface IInterface 
{ 
    int Value { get; } 
} 


[TestMethod] 
public void Test_iinterface_value() 
{ 
    var iinterface = mockery.NewMock<IInterface>(); 
    Expect.Once.On(iinterface).GetProperty("Value").Will(Return.Value(10)); 
    Assert.AreEqual(iinterface.Value, 10, "Doh!"); 
} 

回答

0

測試你的界面通常會導致一個集成測試,有效地測試你的整個堆棧。 UI中的輸入由應用程序邏輯和UI響應處理,您可以看到「大圖」 - 即您的應用程序按預期工作。

在大多數情況下,UI是由標準的,框架提供的類組成的,只有很小的改動,所以除非你對UI框架的能力有疑問,或者自己開發一個,所以沒有真正需要進行單元測試UI類。

如果你不使用高度自定義UI類,單元測試不應該爲另一個原因是必要的 - 應該有你的UI類沒有應用邏輯。

8

除非我錯了,它看起來像您正在創建系統請求時,返回給定值的模仿對象。然後你問價值&你得到它(驚喜)。我會說,編寫這樣的測試是沒有意義的,除非你正在測試模擬框架本身,或者你希望編譯器對你玩弄一些骯髒的技巧。

+0

確實......我認爲這不合理......謝謝 – DarkVM 2011-05-05 05:58:40

0

後面創建的接口的模擬的想法是測試另一個對象(「測試物」),它需要此模擬被創建或正確初始化。創建一個模擬僅用於測試模擬本身恕我直言,似乎錯過了單元測試的重點。

不過,我可以在那裏寫一個測試的接口認爲1箱子或許是有道理的。如果您正在編寫單元測試,不僅僅是爲了測試目的,而且也是爲了讓大綱介紹如何使用某些東西,那麼這樣的「接口測試」可能會演示如何使用IInterface。當然,如果你的界面比較複雜,使用不太明顯,那就更合理了。

3

這被稱爲the Mockery TDD anti-pattern

但是,您可能需要編寫一組測試適用於特定接口的所有實施者,以確保合同被正確執行。舉個例子,這就是Grensesnitt所做的。

0

測試接口沒有意義。測試一個模擬對象也是沒有意義的 - 除非你使用模擬對象來測試一個抽象類的實現方法(在C#定義中是抽象的)。