2011-01-31 112 views
3

我想弄清楚为Spring的WebService模板类编写单元测试的最佳方法。我想要做的就是检查以确保我为客户端生成的每个请求/响应类型正确连接了这些类。我也想确保如果返回异常,异常处理正确。我应该如何测试WebServiceTemplate(SpringWS)

我想我想要做的是找出一种方法来实际发送/接收电话。

有什么建议吗?

+0

你想写实际使用你的WebService模板打一个“活” Web服务单元测试? – 2011-01-31 15:14:31

+0

我并不是要尝试“活”Web服务器,所以像SoapUI这样的工具不会帮助我。基本上,我的客户有十几种不同的请求/响应类型。对于每个响应/请求对,我都有实例化的WebServiceTemplate。我想确保我已经正确连线了这些。我也想模式验证marshallers生成的xml。 – 2011-01-31 15:21:00

回答

3

我会变得俗气,回答我自己的问题。

远一点研究后,我发现,春天WS 2.0有一个新的客户端测试框架,不正是我希望能(从http://blog.springsource.com/2011/01/11/spring-web-services-2-0-released/)做:

做客户机的核心类侧面集成测试是MockWebServiceServer的 。底层 想法是,网络服务模板 连接到这个模拟服务器,发送 请求消息,该模拟服务器 然后对照注册 预期。如果期望值为 met,则模拟服务器随后准备 响应消息,该消息被发回 到模板。

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

  1. 创建MockWebServiceServer。
  2. 设置关于请求消息的期望值。
  3. 创建适当的响应消息
  4. 正常使用WebServiceTemplate,直接通过 客户端代码。
  5. 调用MockWebServiceServer.verify()使 确定所有期望已被满足 。

不幸的是我的项目仍然使用spring-ws 1.5.9。我将尝试将客户端升级到2.0,并查看是否有任何问题。如果这样顺利,我可能会尽快尝试切换服务器端。

0

soapUI是测试您的暴露WS的一个很好的选择。您可以手动制定临时测试的请求,或以各种方式自动执行预定义的测试。

5

严格地说,单元测试根本不应该使用WebServiceTemplate。您的代码应该与WebServiceOperations接口通信,并且应该使用例如单元测试。模拟对象。这不会造成网络调用,它只会测试您编写的Java。

您所描述的内容最好称为集成测试,您可以测试您的布线是否正确完成,可能包括对真实Web服务的调用。

在这种情况下,集成测试补充了单元测试。我的建议 - 写两个。

1

您所描述的不再是一个“单元测试”,因为您正在测试的不仅仅是单独使用WebServiceTemplate的类的单个单元。这个类的一个很好的单元测试可能包括一些嘲讽WebServiceTemplate类,以便您可以测试类的行为时,WST返回不同类型的反应,异常等

用于验证类的行为在测试使用有线合作者(以及Spring上下文)运行时,你应该看看Spring的TestContext Framework。这使您可以使用@ContextConfiguration({"path/to/spring/xml"})等注释测试类来让Spring在运行测试之前实例化一个ApplicationContext,并将任何@Autowired属性注入到测试类中。

最后说明:测试您的webservice使用类对实时web服务通常是一种不好的做法,因为这会在测试中引入外部依赖关系 - 服务是否正常运行?它是什么服务器?它是什么版本?等等。您可能不想将这些测试作为正常单元测试套件的一部分运行。