我有一個java類,它有一個使用Facade(Singleton)創建的靜態成員。可測試設計
Class A implements InterfaceA { private static DataStore db = DataStoreFacade.getInstance("BDB"); //singleton instance public void save(final String key, final String val) { db.save(key,val); } };
這裏類A被用作webservice(無狀態bean)的成員變量。
我無法使用EasyMock測試此代碼,因爲無法覆蓋DataStore實例。
有兩種選擇。
有一個構造函數將DataStore的實例設置爲db成員變量。問題是我不希望webservice類知道哪個數據存儲實例已經創建。
提供一個額外的受保護的Set方法來覆蓋數據庫對象。這是我用來創建DataStore的Easy Mock對象並覆蓋成員變量的地方。這是否是正確的設計?
還有什麼其他的可能性?
Thx爲鏈接。在單例中添加一個公共方法來覆蓋它的對象對我來說是一個非常重要的問題。我不認爲我可以使用宏來選擇編譯代碼來啓用執行測試的方法。 – rjoshi 2010-02-03 19:20:42