У меня есть аспект.
@Aspect
public class MyAspect {
private MethodInterceptor myInterceptor;
public MyAspect() {
no-op
}
public void setInterceptorFactory(@NonNull final InterceptorFactory interceptorFactory) {
//code
}
@Around("execution(* *(..)) && @annotation(enableMetrics))
public Object logAndProceed(final ProceedingJoinPoint pjp) {
return myInterceptor.invoke(new SimpleMethodInvocation(pjp));
}
}
И я использую это так
@EnableMetrics
public GetResponse getContract(args..) {
//code
}
Я делаю переплетение времени загрузки этого аспекта.
Теперь при выполнении модульных тестов для метода getContract
код аспекта также выполняется и выдает NPE в операторе возврата из logAndProceed
.
Все, что я хочу, это отключить переплетение аспектов только для тестирования метода getContract
. Есть ли хорошее решение для этого?
Уже видел эту ссылку, невозможно использовать if() pointcut прямо сейчас.
if()
, потому что это будет специфичный для теста scode в вашем производственном коде, а также замедлит ваши аспекты, потому что условие должно оцениваться во время выполнения для каждой совпадающей точки соединения. Вы хотели бы сделать это только в том случае, если это необходимо для вашего производственного аспекта. Просто настройте свой инструмент сборки, чтобы он не помещал ткач времени загрузки в командную строку JVM. Я человек Maven, поэтому я не могу помочь вам с Ant (я понятия не имел, что люди на самом деле все еще используют его), но это должно быть просто в любом инструменте сборки. - person kriegaex   schedule 27.05.2020