如何解决如何将http请求回滚到将数据保存到db的api端点
所以我正在编写一些组件测试,据我所知,测试本身不应该直接访问db或对应用程序一无所知。
Http调用很容易模拟,但是实现中的数据库访问又如何模拟呢?
所以我所做的是我向api端点发出一个http请求,该端点将数据保存到db中,该数据用于测试目的,目标是在测试后回滚该事务。
@Before
public void setupTripEvents() throws ExecutionException,InterruptedException {
dbIntegrationMock = new DbIntegrationMock();
setupTrips(1L,"CHARGING_STATUS_CHANGE");
setupTrips(2L,"CHARGING_STATUS_CHANGE");
setupTrips(3L,"DRIVER_LOGIN");
setupTrips(4L,"DRIVER_LOGOUT");
setupTrips(5L,"IGNITION_ON");
setupTrips(6L,"IGNITION_OFF");
}
private void setupTrips(long l,String triggerType) throws ExecutionException,InterruptedException {
TripEventEntity tripEventEntity = new TripEventEntity();
<---- data ---->
dbIntegrationMock.saveTripEventEntity(tripEventEntity);
}
public Void saveTripEventEntity(TripEventEntity tripEventEntity) throws ExecutionException,InterruptedException {
return HttpClient.forService(Service.withName("componentname"))
.send(HttpRequest.forPut("/dev/db/save/tripevententity")
.withPayload(tripEventEntity)
.withHeader(HttpHeaders.ACCEPT,"application/json"),HttpResponseType.of(Void.class,MediaType.of("application/json")))
.whenComplete(HttpStatusToExceptionMapper::statusToException)
.thenApply(response -> response.payload().orElse(null))
.toCompletableFuture()
.get();
}
@PutMapping(value = "/db/save/tripevententity",produces = "application/json")
public DeferredResult<ResponseEntity<Void>> saveTripEvent(HttpEntity<TripEventEntity> request) {
log.info("Save trip event entity...");
return process("tripevententity","",o -> o,request,call -> save(request));
}
解决方法
好吧,这不是交易,因此无法回滚,但是我可以创建另一个API,在测试完成后将删除此数据
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。