Я пытаюсь написать тест JUnit для моего модуля Spring, увидев, что моя логика работает с использованием SwaggerUI.
Однако происходит то, что я пропускаю некоторые данные в моем экземпляре H2 (используется только для тестов), и я не понимаю, почему.
Вот что я делаю:
MyObjectController.java
@PostMapping("/myobject")
public void save(HttpServletRequest request, HttpServletResponse response) throws Exception {
// Save and get id
Integer id = service.save();
URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(id).toUri();
// Run async
service.run(id); // At this stage, id = 1 because the insert completed correctly
// Return id
response.setHeader(HttpHeaders.LOCATION, location.toString());
}
MyObjectService.java
@Async
@Transactional
public void run(Integer id) throws Exception { // As above, id = 1 but this time data is not there!
// Retrieve and run
Optional<MyObject> myObject = myObjectDao.findById(id);
if (!myObject.isPresent()) {
throw new NotFound();
}
...
}
/myobject
конечная точка вызывается с использованием MockMVC, и после ее правильного вызова возвращается ожидаемый идентификатор.
Если я ставлю точку останова в начале service.run(Integer id)
и звоню /myobject
с помощью SwaggerUI, я вижу, что все в порядке, но этого не происходит при работе в JUnit.
Ребята, не могли бы вы помочь мне с этим?