【问题标题】:unit test cases for spring aspect by passing join point?通过连接点进行弹簧方面的单元测试用例?
【发布时间】:2013-04-08 13:56:54
【问题描述】:

我有spring aop aspect,它的方法如下:这是一个将在特定方法之前调用的方面。

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

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

谢谢!

【问题讨论】:

    标签: java spring spring-aop


    【解决方案1】:

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

    1. JoinPoint 是一个接口。因此,您应该能够创建您自己的具有您期望的行为的“存根”实现。在您的测试中,实例化此存根的一个新实例并将其传递给 someMethod 方法。
    2. 使用模拟框架模拟JoinPoint 对象,并在模拟上设置预期行为。如果您通常不熟悉模拟框架,这听起来可能有些陌生,因此我建议您查看Mockito 上的文档,这是一个流行的模拟框架。

    在单元测试方面,最佳实践(至少是我的)建议测试应始终使用某种模拟/存根(用于成员和传递的参数),以确保单元测试仅测试单元。如果您要使用 Spring/AspectJ 使用的 JoinPoint 的实现,那么您可能还在 您的 单元测试。如果将来这些实现细节发生变化,您的测试可能会在您不更改任何代码的情况下中断。

    【讨论】:

      【解决方案2】:

      我研究了这一点,发现最简单的方法是创建一些方面应该绑定到的“模拟方法”,然后您可以在测试中调用这些方法并针对方面所做的事情进行断言。

      模拟 JoinPoint 非常困难且非常耗时,因为您通常希望访问其中的许多本机内容,例如声明为 final 的反射对象,因此模拟起来很复杂。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 2012-01-08
        • 2013-04-23
        • 1970-01-01
        相关资源
        最近更新 更多