问题标签 [spring-mvc-test]
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.
testing - Spock & Spock Reports:如何“捕捉”并自定义 AssertionError 的错误消息?
我正在与:
- 斯波克核心
- 斯波克报告
- 斯波克弹簧
- Spring MVC 测试
我有以下代码:
此处代码失败(预期如何),因为正在测试的方法确实返回 (MediaType.APPLICATION_JSON)
而不是(MediaType.APPLICATION_XML)
.
所以说的原因@FailsWith(java.lang.AssertionError.class)
。
即使我使用@FailsWith(value=java.lang.AssertionError.class, reason="JSON returned ...")
我也无法reason
通过Spock Reports看到
问题一:我怎样才能看到reason
Spock Reports?。
我知道 Spock 提供了throw()方法,因此我能够做到:
遗憾地抛出不适用于 AssertionError。
如果我使用thrown(AssertionError)
的测试方法不通过,唯一的方法是通过,@FailsWith
但我无法从 AssertionError获取错误消息
问题二如何从 AssertionError中获取错误消息?
我知道我能够做类似的事情
但只是好奇是否可以解决问题二..
java - Spring Boot 测试:测试通过,但不应该(误报)
我有一个没有失败(但应该)的测试的 Spring Boot 项目。
我做错了什么还是Spring有问题?
对于一个小例子,我创建了一个包含 2 个实体(用户和类别)和一个具有 DELETE 方法(https://github.com/sk8ter/demo)的控制器类的小项目。
类别实体有一个没有级联选项的用户实体 id,因此在删除具有类别的用户时它应该会失败:
控制器也很简单:
最后是一个测试:
如果我从DemoApplicationTests中删除@Transactional注释,测试将失败,但在这种情况下,更改将提交到数据库。
在测试中注释 3 行也无济于事。
json - How to ignore attributes while serializing a class by ObjectMapper
I have a class with lots of attributes which are required for server side logic, but a few of those are required for UI. Now when I am creating a json from the class, all the attributes are written to json. I want to ignore some values only when it is converted to json. I Tried with @JsonIgnore
. But it is not working.
My Class Is
#xA;And I am writing this using
#xA;What is wrong here, please help
json - Spring MVC 测试框架 - JSON 端点仅在测试中返回 406
我已经使用 Hibernate 和 JPA 构建了一个有效的 Spring MVC Web 应用程序,该应用程序具有一个端点,只有在通过 Web 浏览器调用时才成功返回 JSON。
我还通过了针对类的单元测试,特别是映射端点的主控制器。
所以我的下一步是使用 spring MVC 测试框架编写一些行为测试来测试 JSON 端点及其所有工作部分(配置、控制器、服务、模型和存储库)。
我已经成功设置了一个使用我的应用程序配置的测试,将东西注入/自动连接在一起,然后针对我的端点发出“GET”请求。我可以调试调用,从到达控制器端点,通过服务,到存储库,成功获取数据并返回正确的模型对象。然而,控制器随后返回 406 未接受响应,测试失败。
我已经花了 2 天的时间来解决这个问题,并且阅读了几乎所有的博客文章和我可以接受的答案,但没有任何建议。
这是我的控制器:
服务:
存储库:
与核心功能相关的依赖项:
JPA 上下文:
Web.xml:
小服务程序配置:
失败的测试:
这里的关键是应用程序通过浏览器完美运行,但在控制器返回响应时使用 spring mvc 测试框架失败。
更新:
解决方案是将我的 servlet-config.xml 和 jpaContext 一起注入@ContextConfiguration
,之后测试运行完美。
有趣的是,我不能只从类路径中加载 servlet-config.xml,而且我不想维护特定于测试的版本,所以我将它移到了我的资源文件夹中。这是否是一个好主意我还不确定,但它现在可以在类路径中使用。
spring-mvc - 如何测试 DeferredResult timeoutResult
这里我转换的方法与以前具有相同的响应签名,但不是立即响应,它现在使用长轮询:
特别是当请求花费太长时间(我之前立即返回)时,我想返回pendingOnTimeout
响应,以防止代理切断请求。
现在我想我已经按原样工作了,但我想写一个单元测试来证实这一点。然而,我所有使用 MockMvc(通过 webAppContextSetup)的尝试都未能为我提供一种断言我得到一个accepted
标题的方法。例如,当我尝试以下操作时:
我得到以下堆栈跟踪:
java.lang.IllegalStateException:处理程序 [public org.springframework.web.context.request.async.DeferredResult> nl.bioprodict.blast.api.PollController.poll(java.lang.String)] 的异步结果未设置在 org.springframework.test.web.servlet.DefaultMvcResult.getAsyncResult(DefaultMvcResult.java:143) 在 org.springframework.test.web 的 org.springframework.util.Assert.state(Assert.java:392) 指定 timeToWait=25000 .servlet.DefaultMvcResult.getAsyncResult(DefaultMvcResult.java:120) 在 org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch(MockMvcRequestBuilders.java:235) 在 nl.bioprodict.blast.docs.PollControllerDocumentation.pollPending(PollControllerDocumentation .java:53) ...
与此相关的 Spring 框架测试似乎都在使用模拟:https ://github.com/spring-projects/spring-framework/blob/master/spring-web/src/test/java/org/springframework /web/context/request/async/WebAsyncManagerTimeoutTests.java
如何测试 DeferredResult timeoutResult 的正确处理?
spring-mvc - Spring MVC在使用ConverterFactory时测试转换服务
最初,我的项目中几乎每个实体类都有一个转换器。我决定放弃所有这些转换器并创建一个将完成所有转换的 ConverterFactory。
这工作正常,但我的测试在需要转换时失败。这是我的测试 xml 配置文件中的一个片段
样品测试
在上面的测试中,我试图提交投诉,但它会失败,因为客户将为空。
参数 customer 应转换为扩展 CommonEntity 的类 Customer。
模拟/设置转换服务如何在我的测试中工作?
spring-security - 使用 Spring 安全测试来测试一个安全的 Spring MVC 控制器
遵循 有关使用Spring Security Test为连接在Spring Security后面的 Spring MVC 应用程序编写测试的文档。
这是一个普通的 spring-boot 应用程序,采用典型的 spring-security 接线。这是主要的Application.java
这是弹簧安全性的接线:
如您所见,除了“/”和“/sign_up”之外的所有请求都需要进行身份验证。我通过部署应用程序验证了身份验证方案可以正常工作。
现在是有趣的部分:编写 spring mvc 测试。我提供的链接提供了一些编写此类测试的好方法,其中spring-security-test框架允许插入模拟用户/安全上下文。我采取的方法
- 定义一个模拟 UserDetails 接口,以及
- 使用 SecurityContextFactory 创建一个 SecurityContext,它
- 应该在测试启动期间插入到应用程序上下文中。
1.的代码如下:
2.的代码如下:
最后,这是测试类:
测试运行的输出:
- 测试 1 通过。
- 测试 2 通过。
- 测试 3 失败。预期的输出,但得到了 <>。
很可能测试 3 失败,因为“SecurityContext”从未得到适当填充。根据文档,它应该可以工作。不知道我错过了什么。任何帮助深表感谢。
java - spring boot 控制器测试,mockMov 不模拟
我使用 Spring MVC 和 Spring boot 来编写一个 Restful 服务。此代码通过邮递员工作正常。当我对控制器进行单元测试以接受发布请求时,模拟的 myService 将始终初始化自身,而不是返回由 when...thenReturn... 定义的模拟值...我使用 verify( MyService,times(1)).executeRule(any(MyRule.class)); 它表明未使用模拟。我还尝试将standaloneSetup 用于mockMoc,但它抱怨找不到路径“/api/rule”的映射。任何人都可以帮助解决这个问题吗?
下面是我的控制器类,其中 MyService 是一个接口。我已经实现了这个接口。
spring - SpringMVC url 路径模式替换
我在 SpringMVC 中有一个 url 路径模式,如下所示:
我有 personId = 2 和 addressId = 3 有没有一种简单的方法可以生成
在 SpringMvc 中使用实用程序方法?
spring - 春天@ResponseBody JSON
我有一个返回 JSON 对象的 Spring 3 控制器。我正在使用 @ResponseBody 注释和 jackson-mapper-asl jar,Spring 将使用它们自动处理 JSON 转换。3 个返回语句返回不同的 JSON 格式。这可以通过使用 Object 修改 getPersonDetails 方法的返回类型来处理,还是有更好的方法。