2010-09-19 85 views
0

我想知道測試用例如何驅動界面設計。如何在不首先實現的情況下測試接口?

現在,如果我有一個方法的接口:

public interface UserService { User getNextUser(); } 

如果UserServiceImpl是UserService的實現,然後按我的模仿對象的理解,我只能嘲笑UserServiceImpl的依賴關係,就像UserRepository一樣,因爲只有這樣我才能真正測試行爲,即UserServiceImpl是否調用UserRepository。然後,如果我必須編寫一個UserServiceTest,而不創建一個UserServiceImpl,那麼我看到的唯一方法是創建一個UserService模擬,這似乎不太正確。

我在哪裏出錯了?

+0

接口反映了設計決策。他們可能*就設計而言是錯誤的。我沒有看到使用自動化測試批准良好/正確設計的任何方法。接口*實現*相反,可以參考其指定/預期行爲進行測試。 – zellus 2010-09-19 12:04:49

回答

0

我不能說我完全理解你想要解決你的問題,但底線是你無法測試一個簡單的界面。如果沒有實現,單元測試沒有什麼可測試的。

接口可能是「錯誤」的唯一方法是,如果它不符合設計要求,而這只是人類可以說明的。

+0

因此,首選方式是創建接口,創建空實現,編寫第一個單元測試,使單元測試失敗,實現簡單的代碼以使測試用例通過,推廣和重複。那麼這是否正確?所以,嘲笑不會真的幫助這裏... – 2010-09-19 11:53:16

+0

其實,我會先寫(不可編譯的)單元測試。這會迫使我想想如何界面看起來。我從中獲得接口,創建一個空實現,使測試用例通過... – 2010-09-23 07:11:04

0

您的測試案例應該通過讓client需要在對象上調用getNextUser()來驅動接口設計。您可能會嘲笑一個對象,進行client的測試。

如果有多個客戶端調用此方法,則可能需要在此處創建接口,以便不同的主機類可以提供不同的行爲。 TDD(以及明顯的BDD)驅動行爲的發展。接口是一個很好的副作用。

0

我的團隊今天考慮測試接口。我們就這個問題提出了兩個問題,如何以及爲什麼? (我們使用VS2010中的MS單元測試框架與CCNET自動執行構建和測試)

1.您如何測試接口?

本文建議定義一個對象實現接口(非明確我假設)。您新建對象並使用is運算符來查看對象是否實現了接口。 http://en.csharp-online.net/Test_for_an_interface_implementation

另一種方法是在測試項目中的類中明確實現接口。如果測試項目沒有建立,那麼它的破壞。這種全或無的方法不是一個好主意,因爲它會阻止其他測試運行。

2.測試接口的價值是什麼?

此時我只看到測試顯示接口與預期不同,意味着它發生了變化。如果您監控設計不變,這一點很重要。如果您的開發人員可以訪問應用程序和測試項目的源代碼,那麼他們總是可以在鏈接接口時更改要通過的測試。

相關問題