Java 需要帮助发布两次唯一字段和预期错误
我正在编写一个测试,它将检查每当有人试图发布同一个唯一的客户端两次时,是否会抛出正确的异常和错误消息。 我需要你帮我弄清楚 我的代码:Java 需要帮助发布两次唯一字段和预期错误,java,spring,spring-boot,exception,duplicates,Java,Spring,Spring Boot,Exception,Duplicates,我正在编写一个测试,它将检查每当有人试图发布同一个唯一的客户端两次时,是否会抛出正确的异常和错误消息。 我需要你帮我弄清楚 我的代码: @Test public void testDuplicatingKeys() throws Exception{ CreateClient createClient = new CreateClient (); createClient.setBic(Bic.1111); createClient.setCif("cif");
@Test
public void testDuplicatingKeys() throws Exception{
CreateClient createClient = new CreateClient ();
createClient.setBic(Bic.1111);
createClient.setCif("cif");
createClient.setLegalCode("legalCode");
MvcResult mvcResult = mockMvc.perform(post("/clients")
.content(objectMapper.writeValueAsString(createClient))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated()).andReturn();
MvcResult mvcResult1 = mockMvc.perform(post("/clients")
.content(objectMapper.writeValueAsString(createClient))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated()).andReturn();
}
因此,当它第一次执行post请求时,它应该使用此请求主体(Bic.1111,“cif”,“legalCode”
)发布一个客户端,并获得一个isCreated
状态。一切都好。但是第二次,它尝试发布具有相同请求主体的同一客户端时,应该会得到一个错误(目前它是http-500,带有ConstraintViolationException
),但不知何故,它仍然会得到isCreated
状态。我如何模拟在同一个客户机上发布两次,然后出现错误?谢谢
MyClientController.java
:
@PostMapping(value = "/clients")
@ResponseStatus(HttpStatus.CREATED)
public Client createBgwClient(@RequestBody CreateClient createClient) {
Client Client =
new Client(
createClient.getBic(),
createClient.getCif(),
createClient.getLegalCode()
);
return clientRepository.save(client);
}
ConstraintViolationException是数据库异常,所以对这些变量有约束。例如primarkey、uniqueconstraint等。。 您可以检查响应消息是否类似于mockMVC的预期部分。 如果不处理错误消息,则情况就不同了。也许你可以查一下@ControllerAdvice。 如果您发送表实体,我们可以检查您是否使用hibernate创建。
如果可能,您可以发送表上的约束。我怀疑您正在尝试编写单元测试用例。您可以从控制器服务库发布代码吗?@psi为什么需要它?我只需要找出一种方法,两次发布同一个请求主体,第二次出现错误。问题出在你的控制器上,而不是在这个单元测试中。这个测试实现了您所期望的,它发送了两次请求。如果它获取isCreated,那么您的控制器将正常工作wrongly@AlmasAbdrazak添加了控制器代码您的代码中的mockMvc是什么?它发送真正的http请求吗?