2017-03-18 81 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