2010-10-06 39 views
4

我有一個複雜的類(300+行),我試圖從不同的「觀點」來測試。我已經創建了三個不同的單元測試。每個測試本身就是一個複雜的類(100多行)。問題是 - 什麼是將它們存儲在項目目錄樹中的最佳位置?這是我如何做它現在(Maven的使用):如何組織複雜類的單元測試?

pom.xml 
/src 
    /main 
    /java 
     /com 
     /Foo 
      ComplexClass.java 
    /test 
    /java 
     /com 
     /Foo 
      /ComplexClass 
      FirstPointOfViewTest.java 
      SecondPointOfViewTest.java 
      ThirdPointOfViewTest.java 

當然,名字只是佔位,爲了說明問題/問題使用。你對這種方法有什麼看法?

回答

6

您的課程非常複雜,您需要三個不同的測試課程來測試課程的所有方面?也許你在一個班上混合了太多的關注。我會建議使用經過驗證的設計模式來重構類,以正交關注的方式分離類,然後可以單獨進行測試。

0

我會保持你現在擁有的。這個maven結構的主要優點是,不是將源代碼和測試代碼混合在一起,並試圖確定從構建中排除哪些類,則完全忽略test目錄。使用相同的包的目的是將受保護的方法/變量暴露給測試類,但不公開API。

有一件事我可以建議是我在上測試驅動開發是來命名的,他們正在測試的功能組測試班talk by John Smart回升,所以你只要FirstPointOfView.java這是檢驗你的第一個點的行爲的com.foo包的視圖。如果可以將測試類拆分爲單獨的類(如果它們實際測試不同的行爲集),則此方法應該更明顯。

編輯:如果ComplexClass是一個目錄,你應該丟棄,這樣你的測試是在同一個包,我想可能有missread你的榜樣樹,你可能要考慮

3

一兩件事:如果你保持你的測試代碼包的結構與你的主代碼包結構一樣 - 甚至可以使用不同的物理目錄,就像你現在正在做的一樣 - 你的測試類將和你的主類在同一個邏輯包中。這意味着他們可以訪問被測試類中的默認/保護成員,這通常很有幫助。您必須擺脫測試代碼中的ComplexClass包才能實現此目的。

另一個要考慮的:(我會假設你使用JUnit測試)測試類是,這樣你就可以整理並繼承結構它們。如果您有3個不同的觀點,可能會提取包含常用功能的基類,這將使您的測試更容易維護,特別是在發現更多「觀點」時。

將源代碼和測試代碼按照您已經做的分開是一個好主意,它爲您提供了更多選項來構建和維護邏輯分組,從而使維護更加直接。

+1

我確定它會被標記爲異端,但是當我的測試類位於'com.x.y'中時,我將測試類放在'junit.x.y'中。這可以消除任何包級別的共享,並明確包中的內容,從而輕鬆過濾掉任何構建。 – 2010-10-06 17:18:59