簡體   English   中英

如何組織復雜類的單元測試?

[英]How to organize unit tests for a complex class?

我有一個復雜的類(300多行),我試圖從不同的“觀點”進行測試。 我已經創建了三個不同的單元測試。 每個測試本身都是一個復雜的類(100多行)。 問題是 - 在項目目錄樹中存儲它們的最佳位置是什么? 這就是我現在正在做的事情(使用Maven):

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

當然,名稱只是占位符,用於解釋問題/問題。 您如何看待這種方法?

你的課程太復雜了,你需要三個不同的測試類來測試課程的所有方面? 可能你在一個班級中混合了太多的顧慮。 我建議使用經驗證的設計模式對類進行重構,以便將具有正交關注點的類分開,然后可以單獨進行測試。

您可能需要考慮的一件事是:如果您保持測試代碼包結構與主代碼包結構相同 - 即使使用當前正在執行的不同物理目錄 - 您的測試類將位於相同的邏輯包中作為你的主要課程。 這意味着他們可以訪問測試類中的默認/受保護成員,這通常很有幫助。 您必須在測試代碼中刪除ComplexClass包才能實現這一點。

另一件需要考慮的事情是:(我假設您正在使用JUnit進行測試)測試類是 ,因此您可以使用繼承來組織和構造它們。 如果您有3個不同的觀點,可能會提取包含常用功能的基類,這將使您的測試從長遠來看更容易維護,尤其是在發現更多“觀點”時。

正如您所做的那樣分離源代碼和測試代碼是一個好主意,它為您提供了更多選項來構建和維護邏輯分組,從而使維護更加簡單。

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

我可能建議的一件事是我在John Smart關於測試驅動開發的演講中提到的一個問題,就是將測試類命名為他們正在測試的功能組,所以你只需要測試第一個行為的FirstPointOfView.java com.foo包的觀點。 如果將測試類拆分為單獨的類,如果它們實際測試的是不同的行為集,則此方法應該更加明顯。

編輯:如果ComplexClass是一個目錄,你應該刪除它,以便你的測試在同一個包中,我想我可能會錯過你的示例樹

暫無
暫無

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

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