簡體   English   中英

您如何在TDD中組織單元測試?

[英]How do you organize your Unit Tests in TDD?

我做TDD,而且我在組織單元測試方面相當松散。 我傾向於從表示下一個故事或功能塊的文件開始,並編寫所有單元測試以使其工作。

當然,如果我正在引入一個新類,我通常會為該類創建一個單獨的單元測試模塊或文件,但我不會將測試本身組織到任何更高級別的結構中。 結果是我快速編寫代碼並且我相信我的實際程序結構合理,但單元測試本身是“混亂的”。 特別是,它們的結構傾向於概括開發過程的系統發育。 有時我認為自己在測試中懶惰的代碼中交易懶惰。

這有多大的問題? 誰在這里不斷重構和重組他們的單元測試以試圖改善他們的整體結構? 有什么提示嗎? 測試的整體結構應該是什么樣的。

(注意,我不是在問這個問題“每個函數有多少個斷言”問題: 我應該為每個函數/方法編寫多少單元測試?我在談論更大的圖片。)

將您的測試分為兩組:

  • 功能測試
  • 單元測試

功能測試是每個用戶的故事。 單元測試是按班級進行的。 前者檢查您是否真正支持故事,后者練習並記錄您的功能。

有一個目錄(包)用於功能測試。 單元測試應該與他們運用的功能密切相關(因此它們是分散的)。 當你移動和重構你的代碼時,你移動它們並重構它們。

不太重要的部分是組織測試。

我首先將測試放入一個與被測試類相關的類中,因此com.jeffreyfredrick.Foo有一個測試com.jeffreyfredrick.FooTest。 但是如果這些類的某些子集需要不同的設置,那么我會將它們移動到自己的測試類中。 我將測試放在一個單獨的源目錄中,但將它們保存在同一個項目中。

更重要的部分是重構測試。

是的,我試着在我去的時候重構我的測試。 目標是刪除重復,同時仍然保持聲明和易於閱讀。 在測試類和測試類中都是如此。 在測試類中,我可能有一個參數化方法來創建測試假(模擬或存根)。 我的測試假貨通常是測試類中的內部類,但是如果我發現需要我將它們拉出來以便在測試中重用。 我還將在適當的時候使用常用方法創建一個TestUtil類。

我認為重構你的測試對於大型項目的單元測試的長期成功非常重要。 您是否曾聽過有人抱怨他們的測試過於脆弱或者無法改變測試? 您不希望處於更改類行為的位置意味着對測試進行數十次甚至數百次更改。 就像使用代碼一樣,您可以通過重構和保持測試干凈來實現這一目標。

測試代碼。

我為應用程序中的每個類編寫一個單元測試類,並將測試類組織在與測試類相同的包結構中。

在每個測試類中,我沒有太多的組織結構。 對於被測試的班級中的每個公共方法,每個人只有一些方法,所以我一直沒有找到我正在尋找的問題。

對於軟件中的每個類,我都維護一個單元測試類。 單元測試類遵循與測試的類相同的包層次結構。

我將單元測試代碼保存在一個單獨的項目中。 有些人還喜歡將他們的測試代碼保存在名為“test”的單獨源目錄下的同一個項目中。 你可以跟隨任何你覺得舒服的東西。

我試着將單元測試看作是一個獨立的項目。 與任何項目一樣,組織應遵循一些內部邏輯。 然而,它不需要具體或正式定義 - 只要它能使您的項目井井有條,干凈整潔,您所能接受的任何事情都可以。

因此,對於單元測試,我通常要么遵循主項目代碼結構,要么(有時在情況調用時)關注功能區域。

將它們留在一個堆中就像你可能想象的那樣混亂且難以維護

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM