java - 在单元测试中使用 AspectJ 用模拟替换第三方对象

标签 java junit aspectj spring-ws

我正在使用 Spring-WS 和 WebServiceTemplate 类编写一个 Web 服务客户端。在 WebServiceTemplate 类的碗中,创建了一个 WebServiceConnection。 WebServiceConnection.send 用于实际发送消息。我想要做的是拦截对 WebServiceConnection.send 的调用,并将其替换为一些检查传递给 WebServiceConnetion.send 的对象的逻辑。

我觉得这将是使用方面的好地方。但是,我不确定如何仅在执行单元测试时才运行这些方面。我还希望根据我正在执行的测试运行不同的方面。

有人对如何做到这一点有任何想法吗?

最佳答案

您可以将运行时编织与 AspectJ 结合使用。您不必将这些方面编译到您的应用程序中,在测试时包含它们就足够了。

由于使用 AspectJ 时类路径上必须有 META-INF/aop.xml,并且您必须使用 -agent:myPath/aspectjweaver.jar 启动 JVM,因此您手头有使用 AspectJ 的工具仅在测试时。

哦,如果您使用 AspectJ 来编译应用程序,并且将运行时编织和编译时编织结合起来,则在测试时仍然可以使用其他方面。

关于java - 在单元测试中使用 AspectJ 用模拟替换第三方对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4796127/

相关文章:

gradle - java.lang.IllegalArgumentException带Kotlin的Corda转换存储库

java - 尽管实际和预期相同,但 JUnit 给出 ComparisonFailure

java - 使用 aspectj 修改现有的 java 类行为?

java - 如何向类中添加方法,其中方法名称基于 AspectJ 中现有的带注释的方法?

java - 有没有一种方法可以检查数组中的特定点是否具有特定字符?

java - 重写 .equals() 方法的问题

java - 没有可用的 'javax.sql.DataSource' 类型的合格 bean

java - 当我拆分方法时,Spring AOP 没有被应用

java - 将表名作为准备语句的参数传递

Java Swing - 本地化温度