通过连接点对弹簧方面的单元测试用例?

时间:2013-04-08 13:56:55

标签: java spring spring-aop

我有弹簧aop方面,它有如下方法:它是在特定方法之前调用的一个方面。

public void someMethod(JoinPoint jp) {
        //Somelogic
    }

我需要为此编写一个junit测试用例。如何实例化并将参数发送到someMethod?我的意思是我如何用args填充JoinPoint?如何在关节点设置参数并通过它? aspect在应用程序上下文xml文件中配置。

谢谢!

2 个答案:

答案 0 :(得分:5)

我认为你在这里有几个不错的选择......

  1. JoinPoint是一个界面。因此,您应该能够创建自己的“存根”实现,该实现具有您期望的行为。在测试中,实例化此存根的新实例并将其传递给someMethod方法。
  2. 使用模拟框架模拟JoinPoint对象,并在模拟上设置预期的行为。如果您不熟悉一般的模拟框架,这可能听起来有点异国情调,所以我建议在Mockito上查看这个文档,这是一个流行的模拟框架。
  3. 当谈到单元测试时,最佳实践(至少我的)建议测试应该总是使用某种类型的模拟/存根(对于成员和传递的参数)来确保单元测试仅测试单元。如果您要使用Spring / AspectJ使用的JoinPoint实现,那么您可能还会在 实现的一些逻辑>您的 单元测试。如果这些实施细节将来发生变化,那么您的测试可能会在没有任何代码更改的情况下中断。

答案 1 :(得分:0)

我进入了这个并发现最简单的方法是创建一些模拟方法'方面应绑定到,然后您可以在测试中调用这些方法,并根据方面的内容进行断言。

模拟JoinPoint非常困难且非常耗时,因为您通常希望访问其中的大量本机内容,例如声明为final的反射对象,因此很难进行模拟。