我正在试图找出为Spring的WebService Template类编写单元测试的最佳方法。我要做的是检查以确保我为我的客户端生成的每个请求/响应类型正确连接这些类。我还想确保如果返回异常,则正确处理异常。
我想我正在尝试做的是找出一种方法来进行实际的发送/接收呼叫。
有什么建议吗?
答案 0 :(得分:5)
严格来说,单元测试不应该使用WebServiceTemplate
。您的代码应该与WebServiceOperations
接口通信,并且应该使用例如单元进行单元测试。模拟对象。这不会进行网络调用,只会测试你编写的java。
您所描述的更好地称为集成测试,您可以测试您的接线是否正确完成,可能包括调用真实的Web服务。
在这种情况下,集成测试补充了单元测试。我的建议 - 写两个。
答案 1 :(得分:5)
我会发粘并回答我自己的问题。
经过一番深入研究后,我发现Spring WS 2.0有一个新的客户端测试框架,它完全符合我的希望(来自http://blog.springsource.com/2011/01/11/spring-web-services-2-0-released/):
进行客户端集成测试的核心类是 MockWebServiceServer。潜在的 想法是Web服务模板 连接到这个模拟服务器,发送它 请求消息,模拟服务器 然后核实注册 期望。如果期望是 遇到了,模拟服务器然后准备一个 响应消息,发回 到模板。
典型的测试场景 客户端代码包括:
- 创建MockWebServiceServer。
- 设置有关请求消息的期望。
- 创建适当的回复消息
- 正常使用WebServiceTemplate,直接通过 客户代码。
- 调用MockWebServiceServer.verify()来制作 确定所有的期望都是 满足。
醇>
现在不幸的是我的项目仍然使用spring-ws 1.5.9。我将尝试将客户端升级到2.0并查看是否有任何中断。如果情况顺利,我可能会尽快尝试切换服务器端。
答案 2 :(得分:2)
您所描述的内容不再是“单元测试”,因为您测试的不仅仅是您的类中单独使用WebServiceTemplate的单元。这个类的一个好的单元测试可能涉及模拟WebServiceTemplate类,以便您可以测试当WST返回不同类型的响应,异常等时类的行为。
对于使用有线协作者(以及Spring上下文)验证您的类在运行时的行为的测试,您应该查看Spring的TestContext Framework。这允许您使用诸如@ContextConfiguration({"path/to/spring/xml"})
之类的内容来注释测试类,以便在运行测试之前让Spring实例化ApplicationContext,并将任何@Autowired
属性注入到测试类中。
最后一点说明:针对实时Web服务测试您的Web服务使用类通常是一种不好的做法,因为这会引入外部对测试的依赖性 - 服务是否正常运行?它是什么服务器?它的版本是什么?您可能不希望将这些测试作为正常单元测试套件的一部分运行。
答案 3 :(得分:-2)
soapUI是测试暴露的WS的不错选择。您可以手工制作临时测试请求或以各种方式自动执行预定义测试。