#java #unit-testing #spring-boot #mocking #mockito
#java #модульное тестирование #весенняя загрузка #издевательство #mockito
Вопрос:
У меня есть метод в классе service, который выполняет вызов retrofit2, и я пытаюсь имитировать этот вызов. Это работает, когда я пытаюсь имитировать успешный вызов, но не работает, когда я пытаюсь имитировать ответ 400.
import static org.junit.Assert.assertEquals;
public class ServiceTests{
@InjectMocks
private ServiceClass serviceClass;
@Mock
private Call<...> retrofitCallMock;
@Before
public void setup(){
MockitoAnnotations.initMocks(this);
}
//This is what i've tried
@Test
public void succCallTest(){
//this works
when(retrofitCallMock.execute()).thenReturn(Response.success(...));
//run the method in the service class
assertEquals("success", serviceClass.methodCall());
}
@Test
public void failCallTest(){
//this doesn't work
when(retrofitCallMock.execute()).thenReturn(Response.error(400, ...));
//run the method in the service class
assertEquals("fail", serviceClass.methodCall());
}
}
Второй тест не будет работать, поскольку я получу нулевой объект при вызове execute(). И, таким образом, впоследствии был выдан указатель nullpointer.
Приветствуются любые предложения и рекомендации. Спасибо.
Комментарии:
1. Пожалуйста, покажите ваш полный тестовый класс, особенно поля, импорт и аннотации класса.
2. @mle Я отредактировал сообщение с дополнительной информацией
3. Итак, если
execute
возвращаетсяnull
вместо returningResponse.error(400, ...)
, то, похоже, ваш тест должен завершиться неудачей.4. И вы не используете какой-либо runner для аннотации в своем классе? А
assertEqual
безs
из какого импорта?5. @DawoodibnKareem Это действительно сбой, но указатель null по-прежнему выдается. Ожидаемый результат для него — возврат ответа.ошибка (400, …).