2017-03-18 7 views
1
class Continents{ 

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

} 

Ich versuche, Singleton-Klasse mit Macht Mockito verspotten, aber ich bin nicht in der Lage, es zu tun.Mock Statische Instanz

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

Aber ich folgendes Problem konfrontiert -

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

ersetzen Wenn eine der Antworten Ihr Problem gelöst, bitte nehmen Sie das Häkchen auf der linken Seite klicken in der Nähe der Pfeile nach oben und unten zu akzeptieren. Wenn Sie immer noch Probleme haben, kann ich weiter schauen, wenn Sie Ihre Frage bearbeiten, um die Frage zu beantworten, die ich in meiner Antwort gestellt habe. –

Antwort

1

Haben Sie umfassen die Anmerkungen?

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

See this Q&A for related details.

Ein anderer Ansatz besteht darin, PowerMock überhaupt nicht zu verwenden: Sie können einen Dienst erstellen, der den Singleton umhüllt und diesen mit reinem Mockito vortäuscht. Siehe Beispielcode für the wrapper pattern here.

0

Wie wäre es dieses Feld spöttischen COUNTRY_CURRENCY_MAP in Ihrem Test statt

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

Sie mit

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

Dank @pyramidPeak – Atul

Verwandte Themen