2014-11-06 62 views
-1

我使用的是C#,但這個問題可能適用於任何語言。如何避免在測試調用其他方法的方法時多次寫入相同的測試

我有兩個方法A和B. A做了一些事情,並有5個單元測試。 B與A基本相同,但也做了其他事情。 B在其實施中調用A.

我該如何去測試A和B?複製和粘貼A的測試看起來像是很多不必要的重複。 如果A屬於另一個類,我們可以嘲笑這個類並驗證A被調用,但將A看作是B的同一類的一部分,我們不能在這裏做。

這種情況下的最佳做法是什麼?

+0

信息太少。您需要展示一個很好的代碼示例,準確顯示測試A和B之間的關係。請參閱http://stackoverflow.com/help/mcve – 2014-11-06 18:28:03

回答

2

我認爲奧利弗有正確的想法,但我會試着解釋它,因爲它似乎仍然存在一些混淆。

您首先爲方法A編寫一組測試。然後,當您爲B編寫一組測試時,您應該只在B中測試功能。意思是當您爲B編寫測試時,應該假設一個完美的作品,因爲你已經測試過它。在這種情況下,我不會擔心嘲笑A.

作爲一個便箋,我懷疑A不需要公開。它是否從課外被召喚出來?如果不是,我會把它變成私人的,然後寫一組測試,測試A到B.

或者如果A足夠複雜以至於您想單獨測試它,那麼它可能有必要分解成它自己的幫助器類。如果你想要,那麼你可以嘲笑它。

如果你可以給出一些示例代碼,它會讓你更容易幫助你。

0

因此,只需寫出您所期望的方法B應該做什麼的測試。如果它在內部調用另一個私有或公共方法,或者可能通過內部代碼克隆(或其他)對您無關緊要。

每個測試只測試一件事。如果您擁有A的所有測試和B的所有測試,並且您做出任何重大更改,則您將從測試環境中獲得通知。

+0

因此,複製並粘貼測試基本上是? – 2014-11-06 10:47:42

+0

不需要。只需通過調用B來編寫測試就可以完成。唯一的例外是如果B是A的超集方法(如CheckAndDelete()與Check()),那麼您必須*複製*測試,否則只需檢查B顯然完成(從方法名稱派生) – Oliver 2014-11-06 12:05:34

+0

那麼是的。 B是問題中寫的A的超集。 – 2014-11-06 12:11:54

相關問題