コンパイル時にアスペクトを織り込むために、 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」が出力され、「時間指定されたアノテーションが呼び出されました」が毎回出力されます。
いくつかのコンポーネントをモックしてアドバイスの機能を単体テストしたいと思いますが、Spring Beans ではなく AspectJ によってインスタンス化されるMyAdviceClass
ため、これを行うことはできません。MyAdviceClass
このような単体テストのベストプラクティス方法は何ですか?