我有spring aop方面,它的方法如下:这是一个在特定方法之前将被调用的方面。
public void someMethod(JoinPoint jp) {
//Somelogic
}
我需要为此编写一个junit测试用例。我如何实例化并将参数发送到someMethod
?我的意思是我怎样才能JoinPoint
用 args 填充?如何在关节点设置参数并传递它?方面是在应用程序上下文 xml 文件中配置的。
谢谢!
我有spring aop方面,它的方法如下:这是一个在特定方法之前将被调用的方面。
public void someMethod(JoinPoint jp) {
//Somelogic
}
我需要为此编写一个junit测试用例。我如何实例化并将参数发送到someMethod
?我的意思是我怎样才能JoinPoint
用 args 填充?如何在关节点设置参数并传递它?方面是在应用程序上下文 xml 文件中配置的。
谢谢!
我认为您在这里有几个不错的选择...
JoinPoint
是一个接口。因此,您应该能够创建您自己的具有您期望的行为的“存根”实现。在您的测试中,实例化此存根的新实例并将其传递给someMethod
方法。JoinPoint
对象,并在模拟上设置预期的行为。如果您不熟悉一般的模拟框架,这可能听起来有些陌生,所以我建议您查看Mockito上的文档,这是一个流行的模拟框架。在单元测试方面,最佳实践(至少我的)建议测试应该始终使用某种模拟/存根(用于成员和传递的参数),以确保单元测试只测试单元。如果您要使用JoinPoint
Spring/AspectJ 使用的实现,那么您可能还在单元测试中测试它们实现的一些逻辑。如果将来这些实现细节发生变化,您的测试可能会在您没有任何代码更改的情况下中断。
我深入研究了这一点,发现最简单的方法是创建一些方面应该绑定到的“模拟方法”,然后您可以在测试中调用这些方法并针对方面所做的事情进行断言。
模拟 JoinPoint 非常困难且非常耗时,因为您通常希望访问其中的许多本机内容,例如声明为 final 的反射对象,因此模拟起来很复杂。