Spring Security: как заставить @WithMockUser возвращать объект типа User.class - PullRequest
1 голос
/ 28 мая 2020

При тестировании контроллера возникла проблема. Вот так выглядит сигнатура тестируемого метода в контроллере:

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?

...