我应该如何对WebServiceTemplate进行单元测试(SpringWS)

时间:2011-01-31 15:12:30

标签: java unit-testing spring-ws

我正在试图找出为Spring的WebService Template类编写单元测试的最佳方法。我要做的是检查以确保我为我的客户端生成的每个请求/响应类型正确连接这些类。我还想确保如果返回异常,则正确处理异常。

我想我正在尝试做的是找出一种方法来进行实际的发送/接收呼叫。

有什么建议吗?

4 个答案:

答案 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服务模板     连接到这个模拟服务器,发送它     请求消息,模拟服务器     然后核实注册     期望。如果期望是     遇到了,模拟服务器然后准备一个     响应消息,发回     到模板。

  
     

典型的测试场景   客户端代码包括:

     
      
  1. 创建MockWebServiceServer。
  2.   
  3. 设置有关请求消息的期望。
  4.   
  5. 创建适当的回复消息
  6.   
  7. 正常使用WebServiceTemplate,直接通过   客户代码。
  8.   
  9. 调用MockWebServiceServer.verify()来制作   确定所有的期望都是   满足。
  10.   

现在不幸的是我的项目仍然使用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的不错选择。您可以手工制作临时测试请求或以各种方式自动执行预定义测试。