spring mock mvc测试返回404@withmockuser

jljoyd4f  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(540)

当我不使用@withmockuser返回状态401但使用@withmockuser返回状态代码404时
我的管制员

@RestController
@RequestMapping("/api/stocks")
@Api(tags = "stocks")
@Slf4j
public class StockResource {

  @GetMapping("/test/test")
  @Secured("SYS_ADMIN")
  public @ResponseBody String getTest() {
      return "hello";
  }}

我的测试

@SpringBootTest
@EnableAutoConfiguration(exclude = {LiquibaseAutoConfiguration.class})
@AutoConfigureMockMvc
@ContextConfiguration
class RonadTestApplicationTests {

    @Autowired
    private MockMvc mvc;

    @Test
    @WithMockUser(authorities = {"SYS_ADMIN"})
    void contextLoads() throws Exception {
        mvc.perform(get("/api/stocks/test/test")
                .contentType("application/json"))
                .andExpect(status().isOk());
    }

}

以及我不使用@withmockuser时的输出

Status expected:<200> but was:<401>
Expected :200
Actual   :401

以及使用@withmockuser时的输出

Status expected:<200> but was:<404>
Expected :200
Actual   :404
qlfbtfca

qlfbtfca1#

看起来您正在尝试测试基于角色的访问,但是在注解中您指定了一个权限。因为@secured()注解指定了一个应该被授予访问权的角色,而不是一个权限(这里将详细介绍)https://www.baeldung.com/spring-security-method-security).
尝试改用@withmockuser(roles=“sys\u admin”)

@Test
    @WithMockUser(roles = {"SYS_ADMIN"})   //<===== here
    void contextLoads() throws Exception {
        mvc.perform(get("/api/stocks/test/test")
                .contentType("application/json"))
                .andExpect(status().isOk());
    }

相关问题