1
我使用Hibernate和JPA与Spring Boot。春季DTO的单元测试,在Hibernate/Spring Boot中有一个字段集合
我有一个DTO这会从联系人,其中,设想来从客户端的一种形式,将可能有多个手机发送信息收集:
public class ContactDTO {
private BigInteger userId;
private String contactName;
private Map<String, BigInteger> phones;
// getters and setters
}
我想象的数据将在一个JSON对象被发送的格式如下:
{phones:[{"mobile":"2325552932"}, {"landline":"2235553329"}, ...]
我有一个POST方法设计为处理控制器:
@PostMapping(path = "/newContact")
public String createNewContact(@ModelAttribute ContactDTO newContact) {
if (newContact.getPhones() !=null) {
// method that persists phone data
}
// .. use a CRUDRepository object to persist the data to MySQL DB
return "savedContact";
}
我想我的问题是双重的:
- 将我的控制器能够自动映射该格式的JSON对象?
- 我该如何测试?
我使用了Spring启动测试,他们是这个样子:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class AdditiveControllerShould {
@Autowired
private AdditiveController additiveController;
@Autowired
private MockMvc mockMvc;
@Test
public void saveAnEntryWhenPOSTOnlyUserIdAndContactName() throws Exception {
mockMvc.perform(post("/newContact")
.param("userId", "12345")
.param("contactName", "John Smith"))
// how to run test for the Map<String, BigInteger> ???
.andExpect(status().isOk())
.andExpect(content().string(containsString("savedContact")));
}
}
我认为这是接近,但它给我一个错误:'org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为javax.validation.ConstraintViolationException:对于组[javax.validation.groups.Default,]在持续时间期间类[app.models.relationentities.Contact]的验证失败约束违规列表:[ \t ConstraintViolationImpl {interpolatedMessage = '可能不为空',propertyPath = name,rootBeanClass = class app.models.relationentities.Contact,messageTemplate ='{javax.validation.constraints.NotNull.message}'}' – NateH06
我想也许这是一个名称问题的变量,所以我改变了'input.put(“contactName”,“TEST”);'input.put(“name”,“TEST”);'但它仍然给我相同的错误 – NateH06
它看起来像验证问题。确保你获得contactDTO实例,并从那里你可以把它打开。我能够获得控制器内的实例。 – Barath