2017-03-18 120 views
1
class Continents{ 

    Map<String,String> COUNTRY_CURRENCY_MAP = Singleton.getInstance().getCountryCurrencyMap() 

} 

我想模擬使用電源mockito的單身人士班,但我無法做到這一點。模擬靜態實例

Continents continents = mock(Continents.class); 
PowerMockito.mockStatic(Continents.class); 
when(Continents.getInstance()).thenReturn(continents); 
     when(continents.getCountryCurrencyMap()).thenReturn(new HashMap<String, String>()); 

但我面臨着以下問題 -

java.lang.ExceptionInInitializerError 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at javassist.runtime.Desc.getClassObject(Desc.java:43) 
    at javassist.runtime.Desc.getClassType(Desc.java:152) 
    at javassist.runtime.Desc.getType(Desc.java:122) 
    at javassist.runtime.Desc.getType(Desc.java:78) 
+0

替換如果有任何問題的答案解決您的問題,請接受一下對勾向左靠近上下箭頭接受。 如果你仍然有麻煩,我可以看看更進一步,如果你編輯你的問題來回答我在我的答案中問的問題。 –

回答

1

是否包含註釋?

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ClassWithStatics.class) 

See this Q&A for related details

另一種方法是根本不使用PowerMock:您可以創建一個包裝單例的服務,並用普通的Mockito進行模擬。請參閱the wrapper pattern here的一些示例代碼。

0

如何在您的測試嘲諷這一領域COUNTRY_CURRENCY_MAP,而不是

Continents continents = mock(Continents.class); 
PowerMockito.mockStatic(Continents.class); 
when(Continents.getInstance()).thenReturn(continents); 
     when(continents.getCountryCurrencyMap()).thenReturn(new HashMap<String, String>()); 

您可以用

Continents continents = PowerMockito.spy(new Continents()); 
HashMap COUNTRY_CURRENCY_MAP = PowerMockito.mock(HashMap.class); 
Whitebox.setInternalState(continents, "COUNTRY_CURRENCY_MAP", COUNTRY_CURRENCY_MAP); 
+0

謝謝@pyramidPeak – Atul