org.mockito.exceptions.base.MockitoException: убедитесь, что тип UserRestService имеет конструктор без аргументов - PullRequest
0 голосов
/ 18 июня 2020

Я хочу создать тесты JUnit5 для Rest API.

@Test
public void resetRequest_NAME_AND_EMAIL_MISMATCH() throws Exception {
    when(userRestService.resetRequest(anyString(), anyString())).thenReturn(Boolean.valueOf("test"));

    MvcResult result = mockMvc.perform(post("/users/reset_request")
            .contentType(MediaType.APPLICATION_JSON)
            .content(ResetUserDTO))
            .andExpect(status().isBadRequest())
            .andReturn();

    assertEquals(result.getResponse().getContentAsString(), "NAME_AND_EMAIL_MISMATCH");
}

Полный код: Github

Но когда я запускаю тест, я получаю исключение

org.mockito.exceptions.base.MockitoException: Unable to initialize @Spy annotated field 'userRestService'.
Please ensure that the type 'UserRestService' has a no-arg constructor.
.....
Caused by: org.mockito.exceptions.base.MockitoException: Please ensure that the type 'UserRestService' has a no-arg constructor.
    ... 68 more

Код службы отдыха: GitHub

Я попытался добавить @NoArgsConstructor, но получаю предупреждение, что переменные (UsersService userService, PasswordAdminResetHandler resetHandler и et c ...) не инициализированы.

Вы знаете, как я могу исправить эту проблему?

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Выполните эти два шага, чтобы решить проблемы.

  1. Попробуйте использовать аннотацию @Mock вместо @Spy аннотации ИЛИ
  2. Удалите аннотацию @Autowired из конструктора, поскольку она автоматически вводится. Прочтите это для получения дополнительной информации ...
1 голос
/ 18 июня 2020

Другой вариант - явно создать Spy userRestService

@Spy
private UserRestService userRestService = new UserRestService(...);

и использовать созданные Spys или Mocks (при необходимости) в качестве аргументов

1 голос
/ 18 июня 2020

У вас есть два варианта:

1) Удалить окончательное объявление из полей, чтобы конструктор по умолчанию стал доступен для использования Mockito.

2) Предоставить конструктор без аргументов (просто конструктор, не принимающий никаких параметров) и самостоятельно инициализируйте соответствующие поля.

...