私はCustom AspectのためにJunitテストを書こうとしています。ここでアスペクトクラススニペットは、次のとおりです。AspectJのJUnitテスト
@Aspect
@Component
public class SampleAspect {
private static Logger log = LoggerFactory.getLogger(SampleAspect.class);
@Around("execution(* org.springframework.data.mongodb.core.MongoOperations.*(..)) || execution(* org.springframework.web.client.RestOperations.*(..))")
public Object intercept(final ProceedingJoinPoint point) throws Throwable {
logger.info("invoked Cutom aspect");
return point.proceed();
}
}
jointpointは、ポイントカットが一致するたびしたがって、上記のアスペクトインターセプト。そのうまく動作します。
しかし私の質問は、そのクラスを単体テストする方法です。私は、次のJUnitのテストを持っている:それはポイントカットが一致するようJUnitの中
@Test(expected = MongoTimeoutException.class)
public void TestWithMongoTemplate() {
//MongoDocument class
TestDocument test = new TestDocument();
ApplicationContext ctx = new AnnotationConfigApplicationContext(TestMongoConfigurationMain.class);
MongoTemplate mongoTemplate = ctx.getBean(MongoTemplate.class);
//this call is being intercepted by SampleAspect
mongoTemplate.save(test);
}
だから私のmongoTemplate.save(test)
はSampleAspect
によって傍受されています。しかし、どうすれば私のSampleAspect
がジョイントポイントが呼び出されたときにインターセプトしている(おそらく主張することによって)ジュニットで確実にするべきですか?
戻り値がintercept()
からアサーションできません。ジョイントポイントを実行する以外は特別なことはありません。ですから、私のJunitは、アスペクトで実行されているのか、戻り値に基づいて定期的に実行されているのかに違いはありません。
任意のコードは、私が何をテストしようとしていることは、アスペクト織りやポイントカットマッチングだと思うprovided.Thanks
これはユニットテストに役立ちました。 @kriegaex。 – karthik
このポストでAspectの統合テストを探している人は、アスペクトでジョインポイントの動作を追跡している属性を作成し、その属性をJunitでアサートしています。それは私のために働いた。 – karthik
実際に、インテグレーションテストを可能にするためだけに、メンバを追加したり、手動で簿記を追加するべきではありません。プロダクションではアスペクトが遅くなります。アスペクトを統合的にテストする方法は他にもたくさんあります。これは別の疑問に値するかもしれません。あなたが1つを作成する場合は、私に通知しないでくださいと私は答えようとします。 – kriegaex