@WithMockUser 在集成测试中不起作用 - Spring boot

Posted

技术标签:

【中文标题】@WithMockUser 在集成测试中不起作用 - Spring boot【英文标题】:@WithMockUser doesn't work in Integration Test - Spring boot 【发布时间】:2017-04-15 20:54:04 【问题描述】:

尽管我的测试方法使用@WithMockUser 进行了注释,但我仍然收到拒绝访问。为什么这在集成测试中不起作用?使用 @WebAppConfiguration 和 MockMvc 测试一切正常。

测试类:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class FileUploadIntegrationTest 

    @Autowired
    private TestRestTemplate restTemplate;

    @MockBean
    private FileStorageService storageService;

    @Test
    public void classPathResourceTest() throws Exception 
        ClassPathResource resource = new ClassPathResource("/test/testFile.txt", getClass());
        assertThat(resource.exists(), is(true));
    

    @Test
    @WithMockUser(username="tester",roles="USER")
    public void shouldUploadFile() throws Exception 
        ClassPathResource resource = new ClassPathResource("/test/testFile.txt", getClass());

        MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
        map.add("file", resource);
        ResponseEntity<String> response = this.restTemplate.postForEntity("/files", map, String.class);

//        assertThat(response.getStatusCode(), is(HttpStatus.OK));
        then(storageService).should().addFile((any(String.class)), any(MultipartFile.class));
    

控制器类:

@RestController
@RequestMapping("/files")
@PreAuthorize(value = "hasRole('ROLE_USER')")
public class FileUploadController 

    private FileStorageService fileStorageService;
    private AuthenticationFacade authenticationFacade;

    @Autowired
    public FileUploadController(FileStorageService fileUploadService, AuthenticationFacade authenticationFacade) 
        this.fileStorageService = fileUploadService;
        this.authenticationFacade = authenticationFacade;
    

    @ResponseBody
    @PostMapping
    public ResponseEntity<UUID> uploadFile(@RequestParam("file") MultipartFile file) 
        UUID uuid = this.fileStorageService.addFile(authenticationFacade.getAuthentication().getName(), file);
        if (uuid != null) return ResponseEntity.ok(uuid);
        else return (ResponseEntity<UUID>) ResponseEntity.badRequest();
    


【问题讨论】:

你解决了吗?我也有问题要让它工作 很遗憾没有;/ 你使用spring security oauth2吗? 是的,我用过——这里是这个模块的仓库:github.com/MarcinMilewski/sqap-api 【参考方案1】:

无法使用 @WithMockUser 解决此问题。

您可以尝试使用此处描述的配置文件方法:https://***.com/a/35192495/3010484。

【讨论】:

以上是关于@WithMockUser 在集成测试中不起作用 - Spring boot的主要内容,如果未能解决你的问题,请参考以下文章

Google Pay UPI 集成在 Android 中不起作用

AppsFlyer 集成在 iOS 中不起作用?

WP is_user_logged_in() 在集成站点中不起作用

XmlElement(name="custom_name") 在与休息服务集成的 Spring Boot 中不起作用

测试在蒸汽应用程序中不起作用

rails 测试在 gitlab 管道中不起作用