问题标签 [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.
java - 为什么 Spring MockMvc 结果不包含 cookie?
我正在尝试在我的 REST API 中对登录和安全性进行单元测试,因此我尝试尽可能接近地模拟现实生活中的请求序列。
我的第一个要求是:
(请参阅pastebin上的完整课程)。
我尝试在此处获取 cookie,以便稍后使用收到的 CSRF 令牌登录,但cookies
数组为空!
但是,如果我运行我的应用程序并调用
我确实取回了 Set-Cookie 标头,以后可以使用该 cookie(和 CSRF 令牌)进行身份验证。
所以问题是:如何让 MockMvc 向我返回一个 cookie?
spring - 带有对象参数的模拟控制器
我正在尝试使用此签名测试方法:
问题是 MockMvc 参数属性只接受字符串参数,有没有办法将一个HashMap
或一个实例类对象作为参数传递给 RequestBody?
当我尝试将 aHashMap
作为字符串传递时,我得到一个 MismatchException。
spring - 如何在春季测试中发送json而不是params
我使用 org.springframework.test.web.servlet.MockMvc 调用 Spring 控制器。
它看起来像这样:
一切看起来都很好。我也可以传递参数。但现在我需要发送 JSON(字符串)而不是参数。我怎样才能做到这一点?
junit - RestAssuredMockMvc - Autowire 存储库为空
我正在使用 RestAssuredMockMvc 测试一个休息控制器。这是我的代码
当我运行测试用例时,我收到此错误(请注意,clientRepository 为 NULL并引发 NPE,但最后一行表明客户端已成功创建。,
有人可以指导我吗?我究竟做错了什么?为什么我的存储库为空?
端点确实有效,当我使用 Curl 命令和测试时,我无法为单元测试编写 junit,请帮助
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 会在它到达适当的控制器方法之前进行编码。
谢谢。
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
)。
我有两个问题:
- 为什么注入的 WebApplicationContext 不会自动使用 SpringSecurity 过滤器?即使我可以获得 FilterChainProxy 并手动添加它,JavaDoc for EmbeddedWebApplicationContext 状态
上下文中定义的任何 {@link Servlet} 或 {@link Filter} bean 将自动注册到嵌入式 Servlet 容器
结果,我不希望必须手动添加安全过滤器链,因为我(错误地?)由于 Spring Boot 中的自动配置魔法而希望它“正常工作”?
- 为什么应用上下文中没有 FilterChainProxy?同样,也许我对 AutoConfiguration 的期望是不正确的——但我认为这将被配置为上下文配置的一部分。
提前感谢您的任何建议。
编辑
FilterChainProxy 没有被注入的原因是因为我的配置设置为
公共无效配置(WebSecurity web){ web.debug(true);}
这实际上配置了一个org.springframework.security.web.debug.DebugFilter
。无论此调试设置如何,我现在设法获取过滤器的方式如下:
如果我将其添加到 MockMvcBuilder 中,如下所示:
然后它会按预期工作。
但是,我不明白为什么 MockMVC 会忽略过滤器,因为这对于测试请求似乎很重要,因为过滤器中可能发生任何可能影响测试结果的事情。此外,这意味着要正确测试,我需要在 servlet 上下文中查找所有过滤器并建立它们的优先级/url 映射并适当地添加它们。这似乎容易出错且不必要。
spring - Spock中的MockMvc不起作用
我有一个简单控制器的设置:
对于这个简单的控制器,我正在尝试使用 MockMVC 在 Spock 中编写一个测试:
我拥有的 JAR 是:
弹簧测试:4.0.5 Javax-servlet-api:3.0.1 spock-spring:0.7-groovy-2.0
运行测试后我得到的错误是这样的:
spring-mvc - movckmvc 测试返回正确的错误信息
以下测试(测试验证失败,因为用户接受的条款和条件不是最新版本)工作正常,但我想测试返回的错误消息。这样做的原因是后续测试(如果接受的条款和条件版本为空,则检查验证是否失败)将具有相同的测试标准。
因此,我还想测试返回的错误消息。我整个上午都在寻找一些东西,但找不到任何东西,这让我想知道是否甚至可以访问/测试错误消息值?我可以看到它在模型中,但正在努力访问/测试它。
任何帮助,将不胜感激!
提前致谢
小号
测试
unit-testing - @ModelAttribute 控制器 spring-mvc 模拟
我想测试一个@ModelAttribute
用于其方法参数之一的控制器。
@ModelAttribute
方法getExampleEntity
使用@RequestParam
:
我的控制器WebDataBinder
用于调用工厂,该工厂根据参数“id”返回一个对象。
我的测试:
我想以某种方式进行模拟getExampleEntity()
,以便每次使用参数“id”执行 POST 时,我都会收到一个用于测试的模拟对象(“exampleEntity”)。
我可以引入@Binding
测试,但我必须模拟许多级别的方法(如 initBinder -> idEditoryFactory-> editor -> hibernateTemplate 等),才能从某个源(例如,数据库)获取实体。
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
//错误日志