问题标签 [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.

0 投票
1 回答
1206 浏览

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看到

问题一:我怎样才能看到reasonSpock Reports?。

我知道 Spock 提供了throw()方法,因此我能够做到:

遗憾地抛出不适用于 AssertionError。

如果我使用thrown(AssertionError)的测试方法不通过,唯一的方法是通过,@FailsWith但我无法从 AssertionError获取错误消息

问题二如何从 AssertionError中获取错误消息?

我知道我能够做类似的事情

但只是好奇是否可以解决问题二..

0 投票
1 回答
1960 浏览

java - Spring Boot 测试:测试通过,但不应该(误报)

我有一个没有失败(但应该)的测试的 Spring Boot 项目。

我做错了什么还是Spring有问题?

对于一个小例子,我创建了一个包含 2 个实体(用户和类别)和一个具有 DELETE 方法(https://github.com/sk8ter/demo)的控制器类的小项目。

类别实体有一个没有级联选项的用户实体 id,因此在删除具有类别的用户时它应该会失败:

控制器也很简单:

最后是一个测试:

如果我从DemoApplicationTests中删除@Transactional注释,测试将失败,但在这种情况下,更改将提交到数据库。

在测试中注释 3 行也无济于事。

0 投票
1 回答
1435 浏览

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

0 投票
3 回答
1272 浏览

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,而且我不想维护特定于测试的版本,所以我将它移到了我的资源文件夹中。这是否是一个好主意我还不确定,但它现在可以在类路径中使用。

0 投票
2 回答
6726 浏览

spring-mvc - 如何测试 DeferredResult timeoutResult

我正在根据一段时间前的 Spring 博客实施长轮询

这里我转换的方法与以前具有相同的响应签名,但不是立即响应,它现在使用长轮询:

特别是当请求花费太长时间(我之前立即返回)时,我想返回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 的正确处理?

0 投票
1 回答
1211 浏览

spring-mvc - Spring MVC在使用ConverterFactory时测试转换服务

最初,我的项目中几乎每个实体类都有一个转换器。我决定放弃所有这些转换器并创建一个将完成所有转换的 ConverterFactory。

这工作正常,但我的测试在需要转换时失败。这是我的测试 xml 配置文件中的一个片段

样品测试

在上面的测试中,我试图提交投诉,但它会失败,因为客户将为空。

参数 customer 应转换为扩展 CommonEntity 的类 Customer。

模拟/设置转换服务如何在我的测试中工作?

0 投票
1 回答
3385 浏览

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框架允许插入模拟用户/安全上下文。我采取的方法

  1. 定义一个模拟 UserDetails 接口,以及
  2. 使用 SecurityContextFactory 创建一个 SecurityContext,它
  3. 应该在测试启动期间插入到应用程序上下文中。

1.的代码如下:

2.的代码如下:


最后,这是测试类:

测试运行的输出:

  1. 测试 1 通过。
  2. 测试 2 通过。
  3. 测试 3 失败。预期的输出,但得到了 <>。

很可能测试 3 失败,因为“SecurityContext”从未得到适当填充。根据文档,它应该可以工作。不知道我错过了什么。任何帮助深表感谢。

0 投票
1 回答
721 浏览

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 是一个接口。我已经实现了这个接口。

0 投票
1 回答
1089 浏览

spring - SpringMVC url 路径模式替换

我在 SpringMVC 中有一个 url 路径模式,如下所示:

我有 personId = 2 和 addressId = 3 有没有一种简单的方法可以生成

在 SpringMvc 中使用实用程序方法?

0 投票
5 回答
4720 浏览

spring - 春天@ResponseBody JSON

我有一个返回 JSON 对象的 Spring 3 控制器。我正在使用 @ResponseBody 注释和 jackson-mapper-asl jar,Spring 将使用它们自动处理 JSON 转换。3 个返回语句返回不同的 JSON 格式。这可以通过使用 Object 修改 getPersonDetails 方法的返回类型来处理,还是有更好的方法。