参数化 @WithMockUser Spring 启动
Parametrize @WithMockUser Spring boot
我正在尝试使用 @WithMockUser
模拟身份验证来测试我的控制器的方法安全性。
关键是在我的应用程序中有 3 个角色(我们称它们为 Role_1、Role_2 和 Role_3),我想测试它们 分别.
现在,我必须编写 3 个不同的测试来实现这个目的,如下所示:
@Test
@WithMockUser(roles = ["1"])
fun `Role 1 should receive 403 Status code`(){
val url = "$debtorsPath/"
this.mockMvc
.perform(get("/url/"))
.andExpect(status().isUnauthorized)
}
@Test
@WithMockUser(roles = ["2"])
fun `Role 2 should receive 403 Status code`(){
this.mockMvc
.perform(get("/url/"))
.andExpect(status().isUnauthorized)
}
@Test
@WithMockUser(roles = ["3"])
fun `Role 3 should receive 200 Status code`(){
this.mockMvc
.perform(get("/url/"))
.andExpect(status().isOk)
}
但我想对角色 1,2 进行参数化,因为它们是完全相同的测试。这样我就会有这样的东西:
@Test
@ParameterizedRoles(values = ["1", "2"])
fun `Roles 1 & 2 should receive 403 Status code`(){
val url = "$debtorsPath/"
this.mockMvc
.perform(get("/url/"))
.andExpect(status().isUnauthorized)
}
跳过 @WithMockUser
并通过 SecurityMockMvcRequestPostProcessors.user("myUser").roles("ADMIN")
.
以编程方式为您的请求设置角色
然后您可以像这样参数化您的测试:
fun runAndAssert(user: String, role: String, statusMatcher: ResultMatcher){
this.mockMvc
.perform(get("/url/").with(user(user).roles(role)))
.andExpect(statusMatcher)
}
我正在尝试使用 @WithMockUser
模拟身份验证来测试我的控制器的方法安全性。
关键是在我的应用程序中有 3 个角色(我们称它们为 Role_1、Role_2 和 Role_3),我想测试它们 分别.
现在,我必须编写 3 个不同的测试来实现这个目的,如下所示:
@Test
@WithMockUser(roles = ["1"])
fun `Role 1 should receive 403 Status code`(){
val url = "$debtorsPath/"
this.mockMvc
.perform(get("/url/"))
.andExpect(status().isUnauthorized)
}
@Test
@WithMockUser(roles = ["2"])
fun `Role 2 should receive 403 Status code`(){
this.mockMvc
.perform(get("/url/"))
.andExpect(status().isUnauthorized)
}
@Test
@WithMockUser(roles = ["3"])
fun `Role 3 should receive 200 Status code`(){
this.mockMvc
.perform(get("/url/"))
.andExpect(status().isOk)
}
但我想对角色 1,2 进行参数化,因为它们是完全相同的测试。这样我就会有这样的东西:
@Test
@ParameterizedRoles(values = ["1", "2"])
fun `Roles 1 & 2 should receive 403 Status code`(){
val url = "$debtorsPath/"
this.mockMvc
.perform(get("/url/"))
.andExpect(status().isUnauthorized)
}
跳过 @WithMockUser
并通过 SecurityMockMvcRequestPostProcessors.user("myUser").roles("ADMIN")
.
以编程方式为您的请求设置角色
然后您可以像这样参数化您的测试:
fun runAndAssert(user: String, role: String, statusMatcher: ResultMatcher){
this.mockMvc
.perform(get("/url/").with(user(user).roles(role)))
.andExpect(statusMatcher)
}