我剛剛搜索了一下「Joshua Bloch TDD」......沒有多少人出現,這是一個巨大的恥辱,因爲我真的想知道他在這件事上應該說些什麼。Effective Java Item 13 and TDD
項目13(我在看第二版)的標題是「最小化班級和成員的可訪問性」。幾頁之後,他說:
爲了便於測試,您可能想要創建一個類,界面 或更容易訪問member *。 ...爲了測試私人公開課程包私人成員 是可以接受的,但是 不能用於提高任何高於此值的可訪問性... 幸運的是,沒有必要要麼測試可以作爲 部分正在測試的軟件包運行,因此可以訪問它的 程序包專用元素。
*「members」他的意思是「fields,methods,nested classes和nested interfaces」。我知道目前的共識似乎並不包括測試類與應用程序代碼包,甚至沒有一個匹配的結構在src \ test和src \ test下的匹配結構,主要: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
?
「不包含測試課程與應用程序代碼包」你的意思是gradles'src/main/java/com/foo' vs'src/test/java/com/foo'?在這種情況下,類在同一個包中,但不在同一個目錄中。 – zapl
啊......當然,很抱歉:由於我一直在模擬別人在做什麼,所以暫時忘了我的意見......我將編輯我的問題。這是你如何解決「困境」? –
@mikerodent到底什麼是「困境」? – lexicore