У меня есть что-то вроде этого:Как мне высмеять класс реализации?
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;
}
}
Я хочу, чтобы проверить метод execute()
в SomeClass
с помощью JUnit. Поскольку someMethod(String someArg1, String someArg2)
вызывает REST API, я хочу высмеять someMethod
, чтобы вернуть некоторый предопределенный ответ. Но почему-то реальный someMethod
вызывается вместо того, чтобы возвращать предопределенный ответ. Как мне заставить работать?
Вот что я попытался с помощью Mockito и 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);
}
}
Связанного? http://stackoverflow.com/questions/25317804/using-powermockito-whennew-is-not-getting-mocked-and-original-method-is-called –
Это * точно *, где вводится инъекция зависимостей. используйте 'new', передайте' SomeInterface' в качестве параметра. – chrylis
@AndyTurner Я попробовал 'SomeInterface interface = PowerMockito.mock (SomeInterface.class)', за которым следует 'PowerMockito.when (interface.someMethod (Mockito.any(), Mockito.any())). ThenReturn (predefinedResponse);' , Это привело к одной и той же проблеме. – user87407