我正在嘗試爲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