【发布时间】:2021-11-22 11:25:15
【问题描述】:
我目前正在使用 springboot 构建 API。在我的服务层中,我使用实体管理器来创建查询。例如,
public Object editFeedback(Long user_id, Long reservation_id, String feedback){
String s = "select r from Reservation r left join fetch r.driverAssignment where r.id=:id and r.reservation_done_by.id=:user_id ";
List<Reservation> reservations = em.createQuery(s).setParameter("id", reservation_id).setParameter("user_id", user_id).getResultList();
if (reservations.size() == 0)
return new DefaultResponseDTO(201, ResponseStatus.INVALID_INPUTS, "Wrong reservation id");
Reservation reservation = reservations.get(0);
reservation.setFeedback(feedback);
reservationRepository.save(reservation);
return new DefaultResponseDTO(200, ResponseStatus.OK, "Successfully done");
}
我的问题是,在为服务层中的方法编写单元测试时,如何在不影响或从原始数据库获取数据的情况下检查这些查询是否正常工作?
关于更多细节,如果我从原始数据库中获取数据来检查查询,那么输出会不时发生变化。所以,我必须模拟实体管理器。然后查询不会被检查。
Query query = Mockito.mock(Query.class);
Mockito.when(em.createQuery(Mockito.anyString())).thenReturn(query);
Mockito.when(query.getResultList()).thenReturn(sampleReservations.getReservationsForUserReservations());
是否有任何适当的方法可以使用模拟实体管理器检查查询是否正常工作?或者如果我错误地理解了单元测试或任何其他建议?
【问题讨论】:
标签: java spring-boot unit-testing mocking entitymanager