Spring Security Spring MockMvc不需要内容

wa7juj8i  于 2022-12-26  发布在  Spring
关注(0)|答案(2)|浏览(143)

我正在尝试测试一个thymeleaf模板,它根据用户的springsecurity角色返回内容。
我正在检查某些内容是否不存在

@Autowired
private MockMvc mockMvc;

...

mockMvc.perform(get("/index"))
    .andExpect(status().isOk())
    .andExpect(content().string(containsString("This content should be shown.")))
    .andExpect(content().string(XXXXXXX("This content should not be shown")));

这可能吗?

kqhtkvqz

kqhtkvqz1#

一种解决方案是使用hamcrest CoreMatchers.not(....)方法:

@Test
@WithMockUser(roles = "USER")
public void loginWithRoleUserThenExpectUserSpecificContent() throws Exception {
    mockMvc.perform(get("/index"))
            .andExpect(status().isOk())
            .andExpect(content().string(containsString("This content is only shown to users.")))
            .andExpect(content().string(doesNotContainString("This content is only shown to administrators.")));
}

private Matcher<String> doesNotContainString(String s) {
    return CoreMatchers.not(containsString(s));
}
uqzxnwby

uqzxnwby2#

我相信这个解决方案-使用 org.hamcrest 中的'not'作为否定是简单明了的:

mockMvc.perform(get("/index"))
    .andExpect(status().isOk())
    .andExpect(content().string(containsString("This content should be shown.")))
    .andExpect(content().string(not(containsString("This content should not be shown"))));

相关问题