簡體   English   中英

JVM如何代表一個值與多個值的枚舉? (違反Singleton規則?)

[英]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
      }
    }

最初嘗試這樣做似乎很有效,但是我很猶豫。

  1. 這對我來說很難聞。
  2. 假設部署到我的Web應用程序的代碼僅使用INSTANCE,並且曾經在測試中唯一使用過TEST_INSTANCE,那么該枚舉是否仍將遵循單例模型?
  3. 還有其他我不考慮的問題嗎?

提前謝謝你,-馬特

編輯我很想將Spring用於DI,但不允許這樣做。 舊版系統和更高版本僅表示“不,尚未”。 我希望它會實現,但是還不被允許,所以這是我同時進行的解決方案。

我不會使用枚舉在代碼中強制執行單例模式。 而是,只需創建一個DAO接口和相應的具體實現。

在單元測試中,模擬您的DAO界面。 在生產代碼中,使用依賴注入(DI)將您的具體實現填充到其他類中。 大多數DI框架將允許您通過配置設置來強制執行singleton屬性。

暫無
暫無

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

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