【问题标题】:Mocking services for integration testing in MuleMule 中集成测试的模拟服务
【发布时间】:2015-03-04 08:59:09
【问题描述】:
在我们的 mule 项目中 - 我们目前有我们的集成测试用例调用实际的外部 Web 服务(内部)。我们显然希望摆脱这一点,并为外部服务提供模拟服务,因为我们几乎完成了为 mule 项目设置构建服务器的工作。
我发现有很多选项可用于在 mule 流中进行模拟:
- MuleSoft 的 Munit - 仍处于 Beta 版本;但据说是最合适的人选。但由于它是 Beta 版,我们是否可以继续将其用于我们的代码,该代码将很快投入生产
- Confluex/Wiremock 和许多其他用于模拟 Web 服务的框架
- 拥有带有嵌入式码头服务器的测试用例来处理请求并模拟响应。
请告诉我您的意见。
谢谢并恭祝安康,
普里亚
【问题讨论】:
标签:
web-services
mocking
mule
【解决方案1】:
如果你问我会选择 Munit,我知道 BETA 可能有点吓人,但是:
- 您的测试不需要像生产代码那样的稳定性
- Munit 的 BETA 版本是稳定的,即它不是快照,因此它不会突然改变并中断您的测试
- Munit 将在未来几个月内正式发布
这就是代码稳定性。
也就是说,Munit 除了模拟你的流程之外还提供了许多其他功能,而且在某些时候,我认为你可能不仅喜欢对你的 mule 应用程序进行单元测试,而且还喜欢使用 Munit 进行集成测试。
一般来说,您的其他选项虽然适用,但仍然依赖于一些外部系统,而 Munit 是一种隔离您的 Mule 代码并避免其进行外部调用的本机方式。
HTH
【解决方案2】:
我觉得使用 munit xml 配置方法来测试 mule 流更好。
您可以通过为 web 服务指定对模拟组件所需的响应来模拟服务,这是一种简单且可取的方法。对于模拟组件,您可以设置诸如“http.status”..etc 之类的入站属性。下一个流消息处理器中将需要的相应属性。
【解决方案3】:
我是 confluex-mock-http 的作者之一,目前正在将项目迁移到 https://github.com/shamsoftware/sham-http 。所以,我可能有偏见:)
我更喜欢在进程中启动 HTTP 服务器,这就是为什么我帮助构建了一个这样做的项目。该库是专门制作的,因为我们已经使用选项 3 多次解决了这个问题。:)
我将花费一些精力来发布 sham-http,并计划使其与 Mule 3.6.0 兼容。如果您使用的是其他版本,请务必添加一个问题以使其与您使用的任何版本兼容:)