Я использую плагин aspectj maven для создания аспектов во время компиляции. Когда я запускаю приложение, экземпляр класса с аннотацией @Advice
создается непосредственно перед первым вызовом совета. Например:
@Aspect
public class MyAdviceClass {
public MyAdviceClass() {
System.out.println("creating MyAdviceClass");
}
@Around("execution(* *(..)) && @annotation(timed)")
public Object doBasicProfiling(ProceedingJoinPoint pjp, Timed timed) throws Throwable {
System.out.println("timed annotation called");
return pjp.proceed();
}
}
Если у меня есть метод, использующий аннотацию @Timed
, «создание MyAdviceClass» будет напечатано при первом вызове этого метода, а «вызванная временная аннотация» будет напечатана каждый раз.
Я хотел бы провести модульное тестирование функциональности совета, издеваясь над некоторыми компонентами в MyAdviceClass
, однако не могу этого сделать, потому что MyAdviceClass
создается экземпляром AspectJ как раз вовремя, а не через Spring Beans.
Каков наилучший метод модульного тестирования?
MyAdviceClass
с помощью его конструктора, использовать макеты дляProceedingJoinPoint
иTimed
? - person   schedule 12.02.2014doBasicProfiling
таким образом, но я также хотел бы проверить, вызывается ли совет, когда я выполняю аннотированный метод. - person tgrosinger   schedule 13.02.2014