При тестировании контроллера возникла проблема. Вот так выглядит сигнатура тестируемого метода в контроллере:
public ResponseEntity<TaskCardDto> createTaskCard(@AuthenticationPrincipal User user, @RequestBody TaskCardDto taskCardDto)
Поверх тестируемого метода я поставил аннотацию @WithMockUser
. При тестировании этого метода я пытаюсь имитировать службу, которая получает данные из репозитория:
TaskCard stub = ...;
when(taskCardService.saveTaskCard(any(TaskCard.class), any(User.class))).thenReturn(stub);
(Во всяком случае, это не ошибка, что я передаю TaskCard
службе, и не TaskCardDto
. В контроллере я конвертирую DTO в entity). Но в конечном итоге тест вылетает со следующей ошибкой:
Argument(s) are different! Wanted:
taskCardServiceImpl bean.saveTaskCard(
<any com.sin.orb.domain.TaskCard>,
<any com.sin.orb.domain.User>
);
-> at com.sin.orb.controller.TaskCardControllerTest.createTaskCard(TaskCardControllerTest.java:67)
Actual invocations have different arguments:
taskCardServiceImpl bean.saveTaskCard(
TaskCard(id=null, name=test, creationDate=2020-05-28, tasks=[]),
null
);
Как вы сами видите, он ожидает увидеть User.class
, но получает null
. Есть ли способ для @WithMockUser
вернуть объект класса User?