我已经创建了一个控制器,它实际上在我的TestCase中以错误告终。有很少其他控制器,我做了相同的方式,那里的测试工作。目前我正在寻找一个解决方案,但我被困了几个小时。
以下testcase失败,因为它导致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应该返回ok的时候,实体就在它的主体中。我还计算了这个返回responseentity.ok().body(createdcustomer.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;
@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;
}
您没有使用正确的序列化程序
。必须使用LocalDateTimeSerializer
,而不是LocalDateSerializer
。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerDTO {
private Long id;
private String name;
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime created;
@JsonIgnore
private List<PenEntity> pen;
}
你说你用了断点。以后,如果您有一个不理解的异常,请在该异常的构造函数中使用断点。然后,使用堆栈跟踪来确定哪个类引发了异常,以及如何修复它。
在我的调试器中,我看到了以下内容:
“无法写入JSON:无法将类java.time.LocalDateTime转换为类java.time.LocalDate(java.time.LocalDateTime和java.time.LocalDate位于加载程序”bootstrap“的模块java.base中)”
我有一个带有数据库和rabbitmq用法的小型spring boot应用程序。所以我想用集成测试(H2 apache qpid)进行测试。 正如我的应用程序期望数据库和mq Im使用@BeforeAll启动它一样: 问题是,我的web应用程序在@BeforeAll中定义的数据库/mq之前启动。 组织。springframework。测验上下文朱尼特。木星SpringExtension: Web应用
在单元测试中, 你能给我解释一下每一个的用例吗?
我有一个简单的健康控制器定义如下: 以及测试它的测试类: 运行测试时,我得到以下错误: 下面是AppConfiguration。java与主spring boot app类在同一个包中定义: 主要类别: 如果我将测试类中的注释修改如下,测试通过: 我错过了什么?
我有一个 SpringBoot 应用程序,我有一个配置包 但是 PersistenceConfig 不会在 PersonRepositoryTest 中被拾取 但是,如果我从< code>@DataJpaTest更改为@SpringBootTest,PersonRepositoryTest将获取配置。 我的包结构是 Spring Boot 1.4 中的测试改进建议使用 @DataJpaTest 观
DAO类的相关方面如下 我的src/test/resources/application.properties文件如下所示 在Eclipse中作为JUnit测试运行的跟踪 应用程序结构 -SRC ----application.java ----COM ----Hitstpa ----application.properties --测试 ---爪哇
我有以下测试: 你能给出解决这个问题的最佳方法吗?我在MapStruct 1.3.1上。决赛