[英]How does the JVM represent an enum with one value vs multiple values? (Breaking Singleton rules?)
具體來說,我使用帶有枚舉的Singleton模型。 我有一個枚舉單例服務(業務邏輯)調用枚舉單例dao。 我想為我的服務編寫單元測試,但是我不能模擬我的枚舉,因為,這是一個枚舉,也是最終的。 是的,我看到了有關通過反射進行操作的文章,但我希望盡可能避免這樣做。
所以我的想法是,為什么不為我的枚舉添加另一個值TEST_INSTANCE? (這確實是核心問題。)
public enum MyDao {
INSTANCE,
TEST_INSTANCE;
public boolean methodIWouldMockIfICould()
{
if(this == TEST_INSTANCE) { return true; }
... //method code here
}
}
最初嘗試這樣做似乎很有效,但是我很猶豫。
提前謝謝你,-馬特
編輯我很想將Spring用於DI,但不允許這樣做。 舊版系統和更高版本僅表示“不,尚未”。 我希望它會實現,但是還不被允許,所以這是我同時進行的解決方案。
我不會使用枚舉在代碼中強制執行單例模式。 而是,只需創建一個DAO接口和相應的具體實現。
在單元測試中,模擬您的DAO界面。 在生產代碼中,使用依賴注入(DI)將您的具體實現填充到其他類中。 大多數DI框架將允許您通過配置設置來強制執行singleton屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.