我正在尝试为Custom Aspect编写Junit测试。这里是方面类代码片段:JUnit测试AspectJ
@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();
}
}
因此,上面的方面截获每当联合点匹配切入点。它的工作正常。
但我的问题是如何单元测试该类。我有以下的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);
}
所以我在JUnit mongoTemplate.save(test)
正在SampleAspect
截获它匹配切入点。但是,我应该如何确保在联合点被调用时我的SampleAspect
拦截(可能通过断言)?
我不能断言返回值从intercept()
,因为除了执行联合点,它没有什么特别之处。所以我的Junit无论是通过方面执行还是基于返回值的常规执行都找不到任何区别。
任何代码片段上方面测试的例子是巨大的,如果provided.Thanks
这有助于单元测试。 @kriegaex。 – karthik
对于任何想在本文中寻找Aspect集成测试的人,我所做的是我在跟踪任何连接点行为的方面创建了一个属性,然后在我的Junit中声明了该属性。这对我有效。 – karthik
实际上,您不应将成员或手动簿记添加到某个方面,以便启用集成测试。它使生产过程变慢。有很多其他的方法来综合测试方面。也许这值得另一个问题。如果你创建一个,请随时不通知我,我会尽力回答。 – kriegaex