У меня есть конечная точка, и я создал AOP Around, который измеряет время выполнения моей конечной точки и вызывает асинхронную службу, которая будет записывать это время в базе данных.Эта услуга уже проходит независимое тестирование.У меня уже есть интеграционный тест для моей конечной точки, и в конце я хотел бы проверить, действительно ли был вызван мой сервис, который находится в AOP.Как я могу это сделать?
Моя конечная точка:
@PostMapping("/doSomething")
@ResponseStatus(HttpStatus.CREATED)
@AuthorizationTime() <--My AOP
public returnVO createSomething(
@RequestBody @ApiParam(value = "requestVO") final RequestVO requestVO)
throws Throwable {
ResponseVO response = doing1();
doing2();
return response;
}
Мой AOP:
@Aspect
@Component
@RequiredArgsConstructor
public class TimeAspect {
@Autowired
@Qualifier(SleuthThreadConfig.SLEUTH_TASK_EXECUTOR_BEAN_NAME)
private AsyncTaskExecutor executor;
private final TransactionAuthorizationTimeService transactionAuthorizationTimeService;
@Around("@annotation(AuthorizationTime) && args(requestVO)")
public Object authorizationTime(ProceedingJoinPoint joinPoint, final RequestVO requestVO) throws Throwable {
final Instant start = Instant.now();
final Object proceed = joinPoint.proceed();
final Instant end = Instant.now();
final int duration = Duration.between(start, end).getNano();
CompletableFuture
.runAsync(() -> transactionAuthorizationTimeService.createAuthorizationTimeEntity(
requestVO.getKey(),
durationTime)
, executor);
return proceed;
}
}
Мой тест интеграции:
@Test
public void when_create_success() throws JSONException {
final var vo = prepareVO;
RestAssured.given()
.body(vo)
//Act
.contentType(ContentType.JSON)
.post("/doSomething")
.then()
//Assert
.statusCode(HttpStatus.SC_CREATED)
.body(not(isEmptyOrNullString()))
.body(PATH_RESULT, is(SUCESSO.code))
.body(PATH_DATE_HOUR, not(isEmptyOrNullString()));
//TODO check if my transactionAuthorizationTimeService.createAuthorizationTimeEntity called
}