Mockito, когда не работает без параметров

#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 вместо returning Response.error(400, ...) , то, похоже, ваш тест должен завершиться неудачей.

4. И вы не используете какой-либо runner для аннотации в своем классе? А assertEqual без s из какого импорта?

5. @DawoodibnKareem Это действительно сбой, но указатель null по-прежнему выдается. Ожидаемый результат для него — возврат ответа.ошибка (400, …).