1
私はHibernateとSpringBootでJPAを使用しています。Hibernate/Springブートでフィールドのコレクションを持つSpring DTOのユニットテスト
public class ContactDTO {
private BigInteger userId;
private String contactName;
private Map<String, BigInteger> phones;
// getters and setters
}
私が想像しています:
私は、潜在的に複数の電話機が送信されている可能性が考え、クライアント側からのフォームから来ると想定されている連絡先からの情報を収集することになるDTOを持っています
{phones:[{"mobile":"2325552932"}, {"landline":"2235553329"}, ...]
そして、私はそれを処理するために設計されたPOSTメソッドを持つコントローラがあります:データはこの形式でJSONオブジェクトに送信されます
を- 私のコントローラは自動的にその形式でJSONオブジェクトをマッピングすることができるようになります:
@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"; }
私は私の質問は2つありと思いますか?
- どうすればテストできますか?
私は春のブートテストを使用しています、そして、彼らはこのような何かを見て:
@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:要求の処理に失敗しました。グループの持続時間中にクラス[app.models.relationentities.Contact]の検証が失敗しました[javax.validation.groups.Default、] 制約違反のリスト:[ \t ConstraintViolationImpl {interpolatedMessage = 'nullではない可能性があります'、propertyPath = name、rootBeanClass =クラスapp.models.relationentities.Contact、messageTemplate = '{javax.validation.constraints.NotNull.message}'} – NateH06
私は 'input.put(" contactName "、" TEST ");'を 'input.put(" name "、" TEST ");に変更しましたが、それでも私には同じエラーが与えられます – NateH06
検証の問題あなたがcontactDTOインスタンスを取得していることを確認し、そこから取得することができます。私はコントローラ内でインスタンスを取得することができました。 – Barath