J'utilise Hibernate et le JPA avec Spring Boot.Test d'unité pour Spring DTO qui a une collection pour un champ en Hibernate/Spring Boot
J'ai un DTO qui collecterait des informations provenant d'un contact, qui est envisagé de venir d'une forme du côté client qui aurait pu éventuellement avoir plusieurs téléphones envoyé:
public class ContactDTO {
private BigInteger userId;
private String contactName;
private Map<String, BigInteger> phones;
// getters and setters
}
J'imagine la les données seront envoyées dans un objet JSON dans ce format:
{phones:[{"mobile":"2325552932"}, {"landline":"2235553329"}, ...]
Et j'ai un contrôleur avec une méthode POST conçu pour gérer que:
@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";
}
Je suppose que mes questions sont de deux ordres:
- sera mon contrôleur pouvoir cartographier automatiquement l'objet JSON dans ce format?
- Comment pourrais-je tester cela?
J'utilise le test de démarrage du printemps, et ils regardent quelque chose comme ceci:
@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")));
}
}
Je pense que ce proche, mais il me donne une erreur: 'org.springframework.web.util.NestedServletException: traitement Échec de la demande; l'exception imbriquée est javax.validation.ConstraintViolationException: la validation a échoué pour les classes [app.models.relationentities.Contact] pendant la durée de persistance des groupes [javax.validation.groups.Default,] Liste des violations de contraintes: [ \t ConstraintViolationImpl {interpolatedMessage = 'ne peut pas être nul', propertyPath = name, rootBeanClass = classe app.models.relationentities.Contact, messageTemplate = '{javax.validation.constraints.NotNull.message}'} ' – NateH06
Je pensais que c'était peut-être un problème avec un nom de la variable, donc j'ai changé 'input.put (" contactName "," TEST ");' à 'input.put (" nom "," TEST ");' mais ça me donne toujours la même erreur – NateH06
On dirait problème avec la validation. assurez-vous que vous obtenez l'instance de contactDTO et à partir de là, vous pouvez le prendre. J'ai été en mesure d'obtenir l'instance à l'intérieur du contrôleur. – Barath