aspectj maven plugin을 사용하여 컴파일 타임에 Aspect를 만듭니다. 응용 프로그램을 실행할 때 @Advice
주석이있는 클래스가 처음 조언을 호출하기 직전에 인스턴스화됩니다. 예를 들면 : 나는 @Timed
주석을 사용하는 방법이있는 경우단위 테스트 컴파일 시간
@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();
}
}
는 "창조 MyAdviceClass는"메소드가 호출되고 "라는 시간 제한 주석이"때마다 인쇄됩니다 처음으로 인쇄됩니다.
MyAdviceClass
에있는 일부 구성 요소를 조롱하여 조언 기능을 단위 테스트하고 싶습니다. 그러나 MyAdviceClass
은 AspectJ에 의해 Spring Bean이 아닌 인스턴스화되기 때문에 이렇게 할 수 없습니다.
단위 테스트를위한 최선의 방법은 다음과 같습니다.
일반적으로 단위 테스트에는 외부 종속성 조롱이 포함되지만 아무 것도 표시되지 않습니다. 외부 의존성을 조롱하고 싶습니까? 아니면 조언을 조롱하고 싶습니까? – Taylor
생성자를 사용하여'MyAdviceClass' 인스턴스를 생성하고,'ProceedingJoinPoint'와'Timed'에 mock을 사용합니까? –
@Taylor, 나는 그들을 단순화하기 위해 제외시켰다. @RC., 당신은 그런 식으로'doBasicProfiling' 메소드를 테스트 할 수 있다고 정확합니다.하지만 주석이 달린 메소드를 실행할 때 advice가 호출되는지 테스트하고 싶습니다. – tgrosinger