Я создал контроллер, который фактически завершается ошибкой в моем тестовом примере. Есть несколько других контроллеров, которые я сделал таким же образом, и там тесты работают. В настоящее время я ищу решение, но я застрял с часами.
Следующий тестовый сценарий не пройден, поскольку он приводит к ошибке http 500 вместо 200
@ActiveProfiles("Test")
@AutoConfigureMockMvc
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Transactional
@SpringBootTest
. . .
@Test
public void whenCreateCustomer_ThenReturnIt() throws Exception {
String customerName = "foobar2";
MvcResult result = mvc.perform(post(REST_CUSTOMERS)
.header(HEADER_AUTH_KEY, authTokenAdminUser.getToken())
.contentType(MediaType.APPLICATION_JSON)
.content("{\n" +
" \"name\": \""+ customerName + "\"" +
"}")
)
.andExpect(status().isOk())
.andReturn();
String responseString = result.getResponse().getContentAsString();
CustomerEntity customer = objectMapper.readValue(responseString, CustomerEntity.class);
assertThat(customer).isNotNull();
assertThat(customer.getName()).isEqualTo(customerName);
assertThat(customer.getCreated()).isNotNull();
}
Вот тестируемый метод , Я отладил это, и это выглядит хорошо. Сущность была создана, а также доходит до того, что ResponseEntity должен возвращаться нормально с сущностью в ее теле. Также я оценил этот ответ ResponseEntity.ok (). Body (madeCustomer.get ()); в отладчике, и это сработало.
@Override
@PostMapping
public ResponseEntity<CustomerDTO> create(@RequestBody CustomerDTO dto) {
dto.setId(uidService.getNextUidScServer());
if (dto.getCreated() == null){
dto.setCreated(LocalDateTime.now());
}
Optional<CustomerDTO> createdCustomer = customerService.create(dto);
if (createdCustomer.isPresent()){
return ResponseEntity.ok().body(createdCustomer.get());
}
else{
return ResponseEntity.badRequest().build();
}
}
В трассировке стека я нашел это, что я думаю, это моя проблема. Но я понятия не имею, как это решить.
Async:
Async started = false
Async result = null
Resolved Exception:
Type = org.springframework.http.converter.HttpMessageNotWritableException
Вот сущность
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Builder
@Table(name = "Customer")
public class CustomerEntity {
@Id
@Column(name = "uid")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "created")
private LocalDateTime created;
@OneToMany(
mappedBy = "customer",
cascade = CascadeType.ALL,
orphanRemoval = true)
List<PenEntity> pen;
Здесь dto
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerDTO {
private Long id;
private String name;
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDateTime created;
@JsonIgnore
private List<PenEntity> pen;
}
Из сообщения об ошибке похоже, что есть проблема с json отображение. Есть идеи?