【问题标题】:Best way to mock complex soap responses模拟复杂肥皂反应的最佳方法
【发布时间】:2011-04-02 10:16:11
【问题描述】:

我有一个要进行单元测试的 Java 方法,但它需要一个模拟的 SOAP 响应,其中包含多个列表和节点层。我正在使用手写模拟来执行此操作,即只需手动创建对象并设置值,但由于响应非常复杂,因此构建响应很痛苦。我有一个示例 XML 响应是否有使用 XML 创建模拟的简单方法?

我还查看了 Mockito,它对于简单的对象看起来不错,但对于复杂的响应似乎不太好(我可能没有充分发挥它的潜力)。

应用堆栈是 Java 1.6、Spring 3 并使用 JAX-WS。

【问题讨论】:

  • 为什么不将您的代码与复杂模型分离?将其转换为更简单的东西,然后将 that 传递给您的代码。
  • 我需要 SOAP 消息的内容来断言我已经发送了正确的请求。所以我坚持下去。
  • 我建议使用 XML 文件、xml diff 工具和 JAXB 解组。
  • 如果您使用的是 CXF,我已经创建了一个 JUnit 规则来完成大部分繁重的工作:github.com/skjolber/mockito-soap-cxf

标签: spring soap mocking jax-ws


【解决方案1】:

我做这样的事情

@WebService 
public class MyWebService {

        @Autowired
        private ServiceBean serviceBean;

        public SomeReturedData getData(SomeInputData inputData) {
            return serviceBean.getData(inputData);
        } 
}

对于我的 UnitTest,我有一个“ServiceBean”的模拟实例,我将其注入到@MyWebService,并使用“in-vm”传输部署“MyWebService”,如 here 所述

通过使用 in-vm 传输,所有的 XML 编组/解组仍然由 Web 服务框架完成,您只需要处理 Java 部分。

现在有人可能会问,为什么不直接测试“ServiceBean”,为什么需要使用 in-vm 传输来部署 WS?两件事,使用 in-vm 传输,您可以测试 JAXB XML 编组/解组是否正常工作,它还允许您测试您可能为您的 Web 服务定义的任何拦截处理程序。

【讨论】:

  • 这看起来不错,我正在做类似的事情。唯一的事情是我的 ServiceBean 非常复杂,我不想手动创建对象。我希望使用模拟框架或从示例 SOAP 请求创建模拟对象。还有其他想法吗?
  • 您可能想查看 SoapUI 工具,它使您能够启动模拟出来的 WebService。这意味着您的 Junit 测试正在调用另一层而不是被模拟。
猜你喜欢
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多