我正在使用aspectj maven 插件在编译时编织 Aspects。当我运行应用程序时,带有@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。
像这样进行单元测试的最佳实践方法是什么?