问题标签 [mockmvc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7632 浏览

java - 为什么 Spring MockMvc 结果不包含 cookie?

我正在尝试在我的 REST API 中对登录和安全性进行单元测试,因此我尝试尽可能接近地模拟现实生活中的请求序列。

我的第一个要求是:

(请参阅pastebin上的完整课程)。

我尝试在此处获取 cookie,以便稍后使用收到的 CSRF 令牌登录,但cookies数组为空!

但是,如果我运行我的应用程序并调用

我确实取回了 Set-Cookie 标头,以后可以使用该 cookie(和 CSRF 令牌)进行身份验证。

所以问题是:如何让 MockMvc 向我返回一个 cookie?

0 投票
1 回答
8819 浏览

spring - 带有对象参数的模拟控制器

我正在尝试使用此签名测试方法:

问题是 MockMvc 参数属性只接受字符串参数,有没有办法将一个HashMap或一个实例类对象作为参数传递给 RequestBody?

当我尝试将 aHashMap作为字符串传递时,我得到一个 MismatchException。

0 投票
2 回答
2473 浏览

spring - 如何在春季测试中发送json而不是params

我使用 org.springframework.test.web.servlet.MockMvc 调用 Spring 控制器。

它看起来像这样:

一切看起来都很好。我也可以传递参数。但现在我需要发送 JSON(字符串)而不是参数。我怎样才能做到这一点?

0 投票
1 回答
1476 浏览

junit - RestAssuredMockMvc - Autowire 存储库为空

我正在使用 RestAssuredMockMvc 测试一个休息控制器。这是我的代码


当我运行测试用例时,我收到此错误(请注意,clientRepository 为 NULL并引发 NPE,但最后一行表明客户端已成功创建。,


有人可以指导我吗?我究竟做错了什么?为什么我的存储库为空?
端点确实有效,当我使用 Curl 命令和测试时,我无法为单元测试编写 junit,请帮助

0 投票
2 回答
4206 浏览

java - spring 4.1.1,mockmvc 和不想要 HTTP GET 请求的 url 编码

在测试中使用 MockMVC,我需要测试一个已经被 URL 编码的 GET URL:

编码:

但是,在日志中,我看到 URL 在到达适当的控制器方法之前已经再次进行了 url 编码。有没有办法可以防止 spring mockmvc 进行 url 编码?也许在测试中禁用 url 编码?

“[ALREADY URL ENCODED]”字符串的真实示例:

这会在控制器看到它之前再次对 URL 进行编码。

这是来自日志(字符串已再次被 url 编码)

请注意,如果我使用 CURL 调用,则 spring 框架不会执行 url 编码,并且控制器会获取发送的内容。然而,mockmvc 会在它到达适当的控制器方法之前进行编码。

谢谢。

0 投票
2 回答
15085 浏览

spring-security - 使用 MockMVC 集成测试 Spring Boot

我在使用 MockMvc 测试 Spring Boot 应用程序时遇到了一些问题。

我有以下测试类:

这导致 HTTP 200 而不是 401。我启用了组件扫描和自动配置,并且在我的 SecuityConfiguration 类中配置了 spring 安全性,如下所示:

如果我使用 RestTemplate 进行访问,http://localhost:8080/accounts/1那么我会得到预期的行为(HTTP 401)。

我已经看到其他示例(例如Spring Boot setup security for testing)建议我使用该方法自动装配FilterChainProxy并手动添加过滤器。WebApplicationContext.addFilters(filterChainProxy)然而,这对我来说实际上是失败的(org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.web.FilterChainProxy] found)。

我有两个问题:

  1. 为什么注入的 WebApplicationContext 不会自动使用 SpringSecurity 过滤器?即使我可以获得 FilterChainProxy 并手动添加它,JavaDoc for EmbeddedWebApplicationContext 状态

上下文中定义的任何 {@link Servlet} 或 {@link Filter} bean 将自动注册到嵌入式 Servlet 容器

结果,我不希望必须手动添加安全过滤器链,因为我(错误地?)由于 Spring Boot 中的自动配置魔法而希望它“正常工作”?

  1. 为什么应用上下文中没有 FilterChainProxy?同样,也许我对 AutoConfiguration 的期望是不正确的——但我认为这将被配置为上下文配置的一部分。

提前感谢您的任何建议。


编辑

  • FilterChainProxy 没有被注入的原因是因为我的配置设置为

    公共无效配置(WebSecurity web){ web.debug(true);}

这实际上配置了一个org.springframework.security.web.debug.DebugFilter。无论此调试设置如何,我现在设法获取过滤器的方式如下:

如果我将其添加到 MockMvcBuilder 中,如下所示:

然后它会按预期工作。

但是,我不明白为什么 MockMVC 会忽略过滤器,因为这对于测试请求似乎很重要,因为过滤器中可能发生任何可能影响测试结果的事情。此外,这意味着要正确测试,我需要在 servlet 上下文中查找所有过滤器并建立它们的优先级/url 映射并适当地添加它们。这似乎容易出错且不必要。

0 投票
1 回答
3664 浏览

spring - Spock中的MockMvc不起作用

我有一个简单控制器的设置:

对于这个简单的控制器,我正在尝试使用 MockMVC 在 Spock 中编写一个测试:

我拥有的 JAR 是:

弹簧测试:4.0.5 Javax-servlet-api:3.0.1 spock-spring:0.7-groovy-2.0

运行测试后我得到的错误是这样的:

0 投票
1 回答
835 浏览

spring-mvc - movckmvc 测试返回正确的错误信息

以下测试(测试验证失败,因为用户接受的条款和条件不是最新版本)工作正常,但我想测试返回的错误消息。这样做的原因是后续测试(如果接受的条款和条件版本为空,则检查验证是否失败)将具有相同的测试标准。

因此,我还想测试返回的错误消息。我整个上午都在寻找一些东西,但找不到任何东西,这让我想知道是否甚至可以访问/测试错误消息值?我可以看到它在模型中,但正在努力访问/测试它。

任何帮助,将不胜感激!

提前致谢

小号

测试

0 投票
3 回答
20360 浏览

unit-testing - @ModelAttribute 控制器 spring-mvc 模拟

我想测试一个@ModelAttribute用于其方法参数之一的控制器。

@ModelAttribute方法getExampleEntity使用@RequestParam

我的控制器WebDataBinder用于调用工厂,该工厂根据参数“id”返回一个对象。

我的测试:

我想以某种方式进行模拟getExampleEntity(),以便每次使用参数“id”执行 POST 时,我都会收到一个用于测试的模拟对象(“exampleEntity”)。

我可以引入@Binding测试,但我必须模拟许多级别的方法(如 initBinder -> idEditoryFactory-> editor -> hibernateTemplate 等),才能从某个源(例如,数据库)获取实体。

0 投票
1 回答
531 浏览

java - NoInitialContextException - MockMvc 使用从 InitialContext.lookup 获取的数据源连接访问 Rest Web 服务

当我从其他应用程序调用时,有一个休息 Web 服务可以正常工作,但是当我从 Junit 测试程序调用时它会失败。在过去的几个小时里我读了很多书,如果我理解正确,主题中的错误发生有两个可能的原因:1 - 当我使用 MockMvc 时,它忽略了 JNDI 和 2 - 类路径中没有所需的 jar . 关于罐子,我认为这不是原因,因为当从其他应用程序调用时它确实运行正常。关于 jndi,我很困惑为什么容器可以在从其他应用程序调用 web 服务时提供数据源,但在从模拟测试器调用时失败。我发现的最接近的问题是如何使用 Spring 测试模拟的 JNDI 数据源?. 在这个线程中,最后一条评论似乎给出了一个很好的解决方案,但我无法实现主要是因为没有带有“jee:jndi-lookup”的 jndi 文件定义。简而言之,其余 Web 服务是一个公开方法的控制器,并且在该方法内部有一个获取连接的地方。超出控制范围的一切我都不允许更改。如何使用 MockMvc 测试这个 REST Web 服务?当从模拟测试器中调用休息服务时,为什么锁定不起作用?有没有办法在 test-mvc-dispatcher-servlet.xml 中添加一些配置以使 "ic.lookup("java:comp/env/jdbc/MHE")" 运行?

//连接是从这个方法提供的,我不能改变它

//休息网络服务

//MockMvc

//test-mvc-dispatcher-servlet.xml

//错误日志