2012-07-24 51 views
2

正如我從單元測試的藝術閱讀,知道.NET可以隱藏生產運行時測試的seam方法。 (第78頁〜第80頁)。 例如,Java的單元測試可以隱藏生產代碼的接縫界面,因爲.NET可以做到嗎?

public class LogAnalyzer 
{ 
... 
internal LogAnalyzer (IExtensionManager extentionMgr) 
{ 
manager = extentionMgr; 
} 
} 

這樣運行。

using System.Runtime.CompilerServices; 
[assembly: 
InternalsVisibleTo("AOUT.CH3.Logan.Tests")] 

所以紀錄分析工具()只能被稱爲測試類,沒有可測性的目的,對生產代碼增加額外成本的後顧之憂。經過簡要的調查,似乎Java沒有相同的功能。 但是Java有替代品嗎? 謝謝。

回答

1

如何實現自己的自定義ClassLoader?您可以定義自己的註釋,如@HideFromProductionCode,並且如果您的自定義ClassLoader加載了具有@HideFromProductionCode註釋的類,則會引發異常。請參閱How to set my custom class loader to be the default?

或者,只需在構建過程中添加一個腳本,該腳本會遍歷所有已編譯的生產代碼並查找@HideFromProductionCode註釋。

0

一個相當直接的方法是使用Maven類目錄結構,其中包含用於生產代碼和測試代碼的單獨目錄(通常位於名爲src/mainsrc/test的目錄下)。當運行單元測試時,類路徑包括主目錄和測試目錄。但是當您構建在生產環境中部署的JAR時,僅包含主目錄中定義的類;這樣,引用測試類的生產代碼將導致編譯錯誤。

+0

感謝您的回答。我的意思是爲了使生產代碼可測試,我們需要打開單元測試的「seam」方法來注入可控的存根/模擬/派生類,我的問題是如何隱藏這些「seam」方法被稱爲測試,而不是生產用途。 – 2012-07-25 00:54:08

+0

@JimHorng好的,我誤解了這個問題。在這種情況下,我會離開這些方法並使用某種配置標誌設置運行時(屬性文件,系統屬性等)來啓用/禁用它們。使這些方法存在但禁用可能對調試部署的生產系統中發生的問題非常有用。 – Alex 2012-07-25 15:36:25

相關問題