Я пытаюсь написать тесты Junit для Custom Aspect. Вот фрагмент класса Aspect:
@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();
}
}
Таким образом, вышеупомянутый аспект перехватывает всякий раз, когда точка соединения совпадает с pointcut. Прекрасно работает.
Но мой вопрос в том, как unit test этот класс. У меня есть следующий тест 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)
в Junit перехвачен SampleAspect
, поскольку он соответствует pointcut. Но как я должен убедиться в junits (возможно, утверждая), что мой SampleAspect
перехватывает, когда эта точка соединения вызывается?
Я не могу утверждать на возвращаемое значение из intercept()
, поскольку он не делает ничего особенного, кроме выполнения совместной точки. Таким образом, мой Junit не может найти разницы, выполняется ли его по аспектному или регулярному исполнению на основе возвращаемых значений.
Любые примеры фрагментов кода при тестировании аспектов были бы замечательными, если бы они предоставлены. Спасибо