首页 > 解决方案 > 如何在使用 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());
    }```

标签: javaspringspring-bootunit-testingmockmvc

解决方案


如果它是 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());
}

推荐阅读