AOP的可测试性

时间:2013-12-08 13:06:24

标签: spring aop aspectj

我在AOP世界中是全新的。

在阅读了一些书籍(例如,春天在行动中)之后,我对AOP有一个基本问题 - 我们如何确保AOP在现有系统中仍在工作或不工作,尤其是在系统发生变化时。

你知道在现实世界中,特别是当程序仍然在实施时,设计总是在变化。它可能是重大的程序结构变化,可能是重构。总之,程序总是在变化。

但是,我们在程序中采用AOP的方式取决于实现细节。 (例如,公共/私有方法名称)如果更改了实现细节,则可能AOP不起作用。更糟糕的是,如果我们在一个大团队中工作,可能有人会改变AOP所依赖的一些实施细节,但他根本不知道。那么最大的问题是我们怎么知道AOP在这种情况下不起作用?是否有任何编译保证或至少是junit case保证?

非常感谢您的回答。

2 个答案:

答案 0 :(得分:1)

真正测试这一点的唯一方法是使用一些自动化测试,否则,正如您所指出的,人们可以改变实现细节并打破现有的AOP。 Spring提供了集成测试支持,可以从你的contianer加载bean(并加载你的AOP)。 http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch10s03.html

答案 1 :(得分:1)

这可以使用Junit和spring-test进行测试,可以编写一个Junit测试类,它可以从应用了方面的图层注入一个对象并模拟其下面的图层。

然后调用应用了方面的对象,并声明结果符合预期。

这是如何测试方法安全性(通过方面应用)是否有效的example。 测试确认按预期抛出AccessDeniedException,证明该方面正在运行。

其他方面可以使用弹簧测试和模拟以类似的方式进行测试。