使用mockMvc做Spring测试时怎么传递数组类型的参数啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用mockMvc做Spring测试时怎么传递数组类型的参数啊?相关的知识,希望对你有一定的参考价值。

一,Test方法中这样写

mockMvc.perform(get("/xxxxx").headers(httpHeaders)
.param("arrayIds[]", "10,11,12,14")
)
二,控制类中这样接收
@RequestParam(value = "arrayIds[]") Long[] arrayIds
参考技术A Spring MVC中传递数据有三种方式:
(1)使用 ViewData 传递数据,ViewData 相当于数据字典,包含 Controlle 和 View 之间传递的所有数据,Controller 会在该字典中添加新数据项,View 从字典中读取数据。
(2)使用 ViewBag 传递数据,ViewBag 基于 Asp.net 4.0 与 .net framework,是 dynamic 类型的对象,虽然 ViewBag 比 ViewData 慢,但是在 ViewPage 中查询数据时不需要类型转换,并且可读性更好。
(3)使用 ViewModel 传递数据,ViewModel 是 ASP.NET MVC 应用中隐式声明的层,它用于维护 Model 与 View 之间的数据传递,是 View 的数据容器。本回答被提问者和网友采纳

Spring 的 MockMvc 是用于单元测试还是集成测试?

【中文标题】Spring 的 MockMvc 是用于单元测试还是集成测试?【英文标题】:Are Spring's MockMvc used for unit testing or integration testing? 【发布时间】:2015-11-20 07:23:27 【问题描述】:

Spring 有两个 MockMvc 设置:

    独立设置 WebApplicationContext 设置

一般来说,MockMvc 用于什么样的测试?单元还是集成?还是两者都有?

我说的对吗?使用独立设置(在 Spring 的应用程序上下文之外运行)允许您编写单元测试,而使用 WebApplicationContext 设置您可以编写集成测试?

【问题讨论】:

【参考方案1】:

我会说这两种方法都用于集成测试,但独立会强制您指定要测试的控制器。

WebApplicationContext 设置正在加载整个上下文,因此您不必关心服务于例如 /people POST 请求的特定控制器在哪里。

因此,我建议使用 WebApplicationContext 设置来根据应用程序需要使用的接口来测试您的 REST API。您无需将测试与实际代码结合起来,然后+您正在记录应用程序的行为方式。

【讨论】:

【参考方案2】:

这两种形式实际上都是集成测试,因为您正在测试代码与 Spring DispatcherServlet 和支持基础设施的集成。区别在于幕后使用的支持基础设施的数量。

详细信息记录在 Spring 参考手册中。

Server-Side Tests Setup Options Difference With End-to-End Integration Tests

值得注意的摘录:

“webAppContextSetup”加载实际的 Spring MVC 配置 导致更完整的集成测试。由于TestContext 框架缓存加载的 Spring 配置,有助于保持 即使添加了更多测试,测试也会快速运行。此外,您可以 通过 Spring 配置将模拟服务注入控制器,在 以便继续专注于测试 Web 层。

...

另一方面,“standaloneSetup”更接近一个单元 测试。它一次测试一个控制器,控制器可以是 手动注入mock依赖,不涉及 加载 Spring 配置。这样的测试更侧重于风格和 更容易查看正在测试哪个控制器,无论是否有 需要特定的 Spring MVC 配置才能工作,依此类推。这 “standaloneSetup”也是编写临时测试的一种非常方便的方式 验证某些行为或调试问题。

...

就像集成与单元测试一样,没有对错之分 回答。使用“standaloneSetup”确实意味着需要一些 额外的“webAppContextSetup”测试来验证 Spring MVC 配置。或者,您可以决定使用 “webAppContextSetup”并始终针对实际的 Spring MVC 进行测试 配置。

...

Spring MVC Test 中提供的选项在 从经典单元扩展到完整的集成测试。可以肯定的是没有 Spring MVC Test 中的选项是经典的单元测试,但它们是 离它更近一点。例如,您可以隔离服务层 将模拟注入控制器,然后您正在测试网络 仅通过 DispatcherServlet 和实际的 Spring 层 配置,就像您可能测试数据库层一样 隔离上面的层。或者你可以使用独立的 设置一次只关注一个控制器并手动提供 使其工作所需的配置。

如有疑问,我建议您先阅读参考手册,然后再在此处发布问题。 ;)

问候,

Sam(Spring TestContext 框架的作者

【讨论】:

以上是关于使用mockMvc做Spring测试时怎么传递数组类型的参数啊?的主要内容,如果未能解决你的问题,请参考以下文章

MockMvc 测试 OPTIONS 请求

使用mockmvc测试如何处理无序数组

Spring Boot WebFlux 测试未找到 MockMvc

将 mock 注入 Spring MockMvc WebApplicationContext

运行 Spring Boot MockMvc 测试时“找不到返回值的转换器”

使用 Spring MockMVC 测试 Spring 的 @RequestBody