2009-05-01 104 views
44

我有2個關於組織單元測試的問題。我應該在哪裏放置我的JUnit測試?

  1. 是否必須將測試放在與測試類相同的包中,還是可以在不同的包中組織測試?

    例如,如果我有有效性其他測試,是正確的將它們分割成不同的包,即使他們是同一類?

  2. 模擬和存根類怎麼樣?我應該將它們與僅包含測試的軟件包分開,還是將它們放在一起?

回答

56

我們做JUnit測試用例的方式是將它們放在同一個包中,但放在不同的根目錄中。由於我們使用Maven,因此我們只使用標準位置,使結構類似於以下內容。

src/main/java/com/foo/Bar.java 
src/test/java/com/foo/BarTest.java 

顯然有更多的結構,但是這讓我們從主線代碼分別建立測試,但仍然可以訪問受保護類等。對於不同類型的測試,這是非常主觀的。當我們開始我們的測試工作(不幸在開發之後開始)時,我試圖讓事情相當孤立。不幸的是,當我們達到500多個測試案例時,它很快成爲了一場噩夢。我從那以後試圖做更多的合併。這導致維護的代碼量減少。正如我所說,雖然這是非常主觀的。

就測試專用代碼而言,我們將其保存在僅存在於src/test/java樹中的單獨com.foo.test軟件包中。

+13

除了我們使用「src/com/foo/...」和「test/com/foo/...」之外,類似的東西除外。 – 2009-06-02 16:20:03

3

測試類應該放在不同的包中,當你打包發佈時,它們更容易與生產代碼分開。我通常會在這些軟件包,各種嘲笑,配置,場景中保留大量測試絨毛。但是當您構建時 - 它不會得到它。在某些情況下,將測試內容保存在不同的項目中是一個不錯的主意。依靠。

2

保持它相同的包允許您使用包私有的可見性代碼,旨在通過測試訪問的代碼。

關於使用單獨的根目錄,這是一個很好的做法。它也對我們有利,因爲我們使用IDEA,所以IDEA認識到生產代碼不能引用測試代碼。

在保持它們分開的情況下,在單元級別每個生產級別擁有一個且只有一個測試類是很有力量的。當然,有些類在生產過程中被創建爲重構的一部分,根本沒有任何測試類,這很好,但是當您想知道測試某個類的測試時,有一個表示ClassNameTest的約定是ClassName的測試是非常有幫助的。儘管如此,TestNG比JUnit更適合這種範式。

3

我也傾向於把我的測試放在同一個包中,但是在不同的根目錄下。這允許我在測試包中的其他東西時測試包私有類或訪問包裝私有類。它們保存在一個單獨的目錄樹中,以允許從部署的結果中排除它們(尤其是確保測試代碼不會意外地進入生產代碼)。然而,最重要的是適合你的情況。

就每個生產類別測試的類別數而言,我所看到的理論是每個燈具編寫一個測試類,即每個安裝結構。在許多情況下,每個生產類與一個測試類相同(或足夠接近),但是我有時會爲生產類編寫更多的測試類(特別是相等測試趨向於分離),偶爾也會有一個測試類對於一組(相關的)生產類(比如測試戰略模式)。

大多數情況下,我不太在意這個理論,但是根據需要重新進行測試,以將重複數量降到最低。

相關問題