【发布时间】:2021-09-19 20:43:07
【问题描述】:
我在下面提供了示例代码。但是当测试运行时,它会调用数据库来获取数据并从数据库中获取数据。 为什么模拟不能正常工作?如何避免在这些类型的服务中调用数据库?
端点:/v1/reservations/calculate-price-by-id/{reservation_id}
服务层
public Object getPrice(Long reservation_id){
String stringQuery = "SELECT distinct u FROM Reservation u left join fetch u.driverAssignment where u.id=:reservation_id";
Query query = em.createQuery(stringQuery);
query.setParameter("reservation_id", reservation_id);
List<Reservation> reservations = query.getResultList();
if(reservations.size()==0)
return new DefaultResponseDTO(201, ResponseStatus.INVALID_INPUTS, "Reservation Id Not valid");
return new DefaultResponseDTO(200, ResponseStatus.OK, "Price Calculated.", reservations );
}
单元测试
@Test
@DisplayName("Get prices of a reservation by it's id")
void getPaymentById() throws Exception {
List<Reservation> list = new LinkedList<>();
Query queryByMock = Mockito.mock(TypedQuery.class);
String stringQuery = "SELECT distinct u FROM Reservation u left join fetch u.driverAssignment where u.id=:reservation_id";
Mockito.when(em.createQuery(stringQuery)).thenReturn(queryByMock);
Mockito.when(queryByMock.getResultList()).thenReturn(list);
mockMvc.perform(MockMvcRequestBuilders
.get("/v1/reservations/calculate-price-by-id/1").contentType(MediaType.APPLICATION_JSON_VALUE))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code", is(200)))
.andExpect(jsonPath("$.data",hasSize(3)));
}
【问题讨论】:
标签: spring-boot mockito junit5