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

时间:2011-01-25 16:29:21

标签: java junit aspectj spring-ws

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

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用AspectJ运行时编织。您不必将这些方面编译到yout应用程序中,它应该在测试时包含它们。

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

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