首页 > 解决方案 > Spring Security:我如何让@WithMockUser 返回一个类型对象 User.class

问题描述

在测试控制器时,我遇到了问题。这是被测试方法的签名在控制器中的样子:

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 转换为实体)。但测试最终崩溃并出现以下错误:

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 类的对象?

标签: javaspringrestunit-testingspring-security

解决方案


推荐阅读