java - 如何在使用 MockMVC 测试表单时将集合设置为参数
问题描述
我想在 Spring Boot 中为我的控制器创建一些测试。具体来说,我想为表单处理创建一个测试以添加新项目。该项目属于类 Drug 并且有一个集合作为
参数:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "drug_pet_types", joinColumns = @JoinColumn(name = "drug_id"), inverseJoinColumns =
@JoinColumn(name = "pet_type_id"))
private Set<PetType> petTypes;`
我也有这个表单的验证器,它不允许任何空/空字段。我的问题是如何将集合分配为 mockMvc.perform() 方法的参数。我放什么而不是???????。这是测试:
@Test
void testProcessCreationFormSuccess() throws Exception {
mockMvc.perform(post("/drugs/new")
.param("name", "Test_Drug")
.param("batchNumber", "255888")
.param("expirationDate", "2023-05-10")
.param("petTypes", "_____?????????____")
)
.andExpect(status().is3xxRedirection());
}```
解决方案
如果它是 POST 正文,那么您可以创建一个Set
对象PetType
,然后JSON
使用将其转换为字符串ObjectMapper
String jsonString = objectMapper().writeValueAsString(Set<PetType>);
然后使用content方法传递 json 字符串
@Test
void testProcessCreationFormSuccess() throws Exception {
mockMvc.perform(post("/drugs/new")
.param("name", "Test_Drug")
.param("batchNumber", "255888")
.param("expirationDate", "2023-05-10")
.param("petTypes", "_____?????????____")
).content(jsonString)
.andExpect(status().is3xxRedirection());
}
推荐阅读
- android - 如何使用 agora.io 将铃声添加到我的应用程序
- ruby-on-rails - 如何使用 Azure Pipelines 将 Ruby 部署到 Azure 应用服务?
- javascript - Date-fns 格式函数显示下一个日期而不是预期的日期
- arraylist - Java8过滤器数组列表与字段日期的自定义对象
- r - 如何在 kableExtra 表的单元格中增加字体大小并调整多行中的字符串?
- android - SCALER_CROP_REGION 如何在 camera2 和原生相机中工作?
- typescript - Typescript 通用可调用构造函数类型
- asp.net-mvc - 如何在 ASP.NET MVC 中集成条带?
- reactjs - 如何监听路由器的变化并强制类组件重新渲染?
- google-apps-script - Apps 脚本将数据导出到另一个电子表格,在 xlsx 中构建并附加到电子邮件