簡體   English   中英

有效的Java項目13和TDD

[英]Effective Java Item 13 and TDD

我只是在Google上搜索“ Joshua Bloch TDD” ...沒什么,這是一個巨大的恥辱,因為我真的很想知道他在這件事上要說些什么。

第13項(我正在看第二版)的標題為“最小化類和成員的可訪問性”。 在幾頁之后,他說:

為了方便測試,您可能會想讓類,接口或成員*更易於訪問。 ...可以將公共類包的私有成員設為私有,以便對其進行測試,但是將可訪問性提高到更高水平是不可接受的...幸運的是,也沒有必要,因為可以使測試作為要測試的程序包的一部分運行,從而可以訪問其程序包專用元素。

*“成員”一詞的意思是“字段,方法,嵌套類和嵌套接口”。

作為TDD的新手,但逐漸找到了自己的腳,我知道當前的共識似乎是不將測試類與應用程序代碼包一起包括在內,甚至不在src \\ test和src \\ main下具有匹配的結構:主要是TDD專家似乎很容易以其他方式構建測試目錄(例如,您有一個目錄稱為“ unittests”,另一個目錄名為“ functionaltests”,另一個目錄名為“ e2etests”)。

具體來說,我在“測試指導下的面向對象的增長軟件”中關注了拍賣應用程序的TDD開發。 作者對添加數百種公共方法毫不猶豫。 此外,在一章之后,我查看了下載的“到目前為止的結構”,他完全改變了測試目錄的結構,將事物划分為測試類別。

至少在過去,是否有經驗豐富的TDD派發者認為這是兩難的根源? 如果是這樣,您如何解決?

作為一個實際的例子,我通過開發Lucene索引應用程序來盡力使用TDD技術:它對文檔進行索引,然后讓您查詢它們。 當前,所有應用程序類都在同一包中。 真正需要公開的唯一方法是在一類中使用main 但是,當然,我有很多公共方法:如果不是因為我正在使用TDD,它們可能都是私有的。

PS沒有“方法可見性”的標簽,所以我選擇了“類可見性”

后來

看來我可能已被“成長面向對象...”中采用的方法引向了一條相當不幸的道路,在該方法中,大概是因為對公共方法的證明而過度使用了公共方法。 哈。

如果您想划分測試類別,是否有人會使用這種方法:

\\src\\unit_tests\\java\\core\\MainTest.java

而且,例如:
\\src\\func_tests\\java\\core\\MainTest.java

\\src\\e2e_tests\\java\\core\\MainTest.java

因為可以將測試作為要測試的軟件包的一部分運行

這並不意味着您必須將測試與主類放在相同的目錄中,它們只必須位於同一包中即可,這可以是單獨的目錄。

假設您有一個包com.acme.foo 因此,您的目錄結構可能是:

src
  main
    java
      com
        acme
          foo
            MainClass
  test
    java
      com
        acme
          foo
            MainClassTest

MainClassTest是在同一個包MainClass所以它可以訪問包私人的東西。 但是這些是單獨的目錄,因此生成的JAR將不包含MainClassTest

我不確定這在Gradle中是如何工作的,因為我正在使用Maven,但是我想那里的概念是相似的。 因此,我將牢記Maven進行解釋。 Maven項目中的典型設置如下所示:

在此處輸入圖片說明

在項目的根目錄上有srctarget 將在構建過程中創建的所有內容放入target文件夾。 這意味着src包含我們實際項目的源代碼。 src還有另外兩個目錄: maintest 只需將main內容放入生產代碼中即可交付的所有內容。 test目錄包含main樹的測試代碼。

因此,通常在src/test/java也存在來自src/main/java目錄的相同包層次結構,因此對於具有相同包定義的測試類,可以訪問駐留在其中的生產類的所有成員。 main分支。

暫無
暫無

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

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