Отключить определенные аспекты во время муравьиных тестов

У меня есть аспект.

@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 прямо сейчас.


person de4shuch3da    schedule 26.05.2020    source источник
comment
Вам не нужен pointcut if(), потому что это будет специфичный для теста scode в вашем производственном коде, а также замедлит ваши аспекты, потому что условие должно оцениваться во время выполнения для каждой совпадающей точки соединения. Вы хотели бы сделать это только в том случае, если это необходимо для вашего производственного аспекта. Просто настройте свой инструмент сборки, чтобы он не помещал ткач времени загрузки в командную строку JVM. Я человек Maven, поэтому я не могу помочь вам с Ant (я понятия не имел, что люди на самом деле все еще используют его), но это должно быть просто в любом инструменте сборки.   -  person kriegaex    schedule 27.05.2020
comment
@de4schuch3da. У меня нет опыта в LTW аспекта. Я ответил на нечто подобное. Поможет ли использование профиля не создавать аспектный компонент для тестирования?   -  person R.G    schedule 27.05.2020