Ich habe so etwas wie dies:Wie spotze ich eine Implementierungsklasse?
public interface SomeInterface {
public String someMethod(String someArg1, String someArg2);
}
public class SomeInterfaceImpl {
@Override
public String someMethod(String someArg1, String someArg2) {
String response;
// a REST API call which fetches response (need to mock this)
return response;
}
}
public class SomeClass {
public int execute() {
int returnValue;
// some code
SomeInterface someInterface = new SomeInterfaceImpl();
String response = someInterface.someMethod("some1", "some2");
// some code
return returnValue;
}
}
ich die execute()
Methode in SomeClass
mit JUnit testen möchten. Da someMethod(String someArg1, String someArg2)
eine REST-API aufruft, möchte ich someMethod
vortäuschen, um eine vordefinierte Antwort zurückzugeben. Aber irgendwie wird der echte someMethod
aufgerufen, anstatt die vordefinierte Antwort zurückzugeben. Wie kann ich es funktionieren lassen?
Hier ist, was ich versucht habe, mit Mockito und PowerMockito:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ SomeInterface.class, SomeInterfaceImpl.class, SomeClass.class })
public class SomeClassTest {
@Test
public void testExecute() {
String predefinedResponse = "Some predefined response";
int expectedReturnValue = 10;
SomeInterfaceImpl impl = PowerMockito.mock(SomeInterfaceImpl.class);
PowerMockito.whenNew(SomeInterfaceImpl.class).withAnyArguments().thenReturn(impl);
PowerMockito.when(impl.someMethod(Mockito.any(), Mockito.any())).thenReturn(predefinedResponse);
SomeClass someClass = new SomeClass();
int actualReturnValue = someClass.execute();
assertEquals(expectedReturnValue, actualReturnValue);
}
}
Verwandte? http://stackoverflow.com/questions/25317804/using-powermockito-whnew-is-not-getting-mocked-and-original-method-is- –
Dies ist * genau * wo Abhängigkeit Injektion kommt. Do not Verwenden Sie 'new', übergeben Sie' SomeInterface' als Parameter. – chrylis
@AndyTurner Ich habe 'SomeInterface interface = PowerMockito.mock (SomeInterface.class)', gefolgt von 'PowerMockito.when (interface.someMethod (Mockito.any(), Mockito.any())). ThenReturn (vordefinierteResponse);' . Es ergab sich das gleiche Problem. – user87407