Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring控制器中模拟用户,并在出现问题时进行调试';她失踪了还是没有被嘲笑?_Java_Spring_Unit Testing_Spring Mvc - Fatal编程技术网

Java 如何在Spring控制器中模拟用户,并在出现问题时进行调试';她失踪了还是没有被嘲笑?

Java 如何在Spring控制器中模拟用户,并在出现问题时进行调试';她失踪了还是没有被嘲笑?,java,spring,unit-testing,spring-mvc,Java,Spring,Unit Testing,Spring Mvc,我有一个SpringMVC应用程序(4.2.1),它带有一个需要“管理员”权限的控制器。我试着测试普通用户得到的是“403”,管理员得到的是“200”。它在浏览器中工作,但在我的单元测试中,两个测试都失败,并返回“302”状态 我相信我已经按照这本书设置好了一切,以便在mockuser中使用@。我想知道怎么弄清楚我为什么会得到302状态。我怀疑它正在重定向到登录页面,因为它根本没有显示用户已登录,但如何验证这一点 @Test @WithMockUser(roles={"USER","ADMIN"

我有一个SpringMVC应用程序(4.2.1),它带有一个需要“管理员”权限的控制器。我试着测试普通用户得到的是“403”,管理员得到的是“200”。它在浏览器中工作,但在我的单元测试中,两个测试都失败,并返回“302”状态

我相信我已经按照这本书设置好了一切,以便在mockuser中使用
@
。我想知道怎么弄清楚我为什么会得到302状态。我怀疑它正在重定向到登录页面,因为它根本没有显示用户已登录,但如何验证这一点

@Test
@WithMockUser(roles={"USER","ADMIN"})
public void requestProtectedUrlWithAdminRole() throws Exception {
    mvc.perform(get("/admin/").with(csrf()))
        .andExpect(status().isOk())
        .andExpect(content().string(containsString("Admin")))
        .andReturn();
}
更新:

我发现我可以通过在
perform
方法调用和第一个
方法调用之间添加
.andDo(print())
来打印请求和响应。andExpect
(添加我的注释作为答案)我认为您缺少了一个侦听器,这就是为什么没有使用注释的原因。将以下注释添加到测试类中

@TestExecutionListeners( { WithSecurityContextTestExecutionListener.class })
对于其他功能,您可能需要其他侦听器,但要使注释
@WithMockUser
正常工作,您肯定需要这个侦听器

调试部分很棘手。。。您可以开始在DispatcherServlet或检查用户的筛选器中放置一些断点(很抱歉,我不知道哪个类进行身份验证/授权)。

(添加我的注释作为答案)我认为您缺少一个侦听器,这就是为什么不使用注释的原因。将以下注释添加到测试类中

@TestExecutionListeners( { WithSecurityContextTestExecutionListener.class })
对于其他功能,您可能需要其他侦听器,但要使注释
@WithMockUser
正常工作,您肯定需要这个侦听器


调试部分很棘手。。。您可以开始在DispatcherServlet或检查用户的筛选器中设置一些断点(很抱歉,我不知道哪个类进行身份验证/授权)。

这是我需要的缺少的部分。非常感谢。那是我需要的那一块。非常感谢。