在集成测试中使用实时端点与使用模拟端点

时间:2013-03-07 03:18:24

标签: java testing integration-testing

最近,我和我的同事一直在为Java项目编写集成测试。大多数这些集成测试需要至少一个SOAP Web服务调用,LDAP查询或其他依赖于我们不一定能控制的端点的东西。其中一些SOAP / LDAP调用使用的lib仍处于开发阶段。

这最终意味着我们的集成测试有时会在构建期间因机器出现故障,更改lib或更改端点而失败。在做了一些研究之后,我注意到人们在集成测试中使用实时端点似乎相当普遍,但我也发现了有关为什么使用实时端点可能有害的文章(http://martinfowler.com/articles/nonDeterminism.html#RemoteServices)。

我想知道在创建集成测试时更有意义:模拟所有端点,还是使用实时端点?似乎使用实时端点,特别是在不可靠时,会使测试不确定。然而,模拟看起来他们只会带你到目前为止,你将无法测试生产环境中发生的事情。整合测试是否由纯模拟组成,对于验证除回归之外的任何内容有价值吗?

2 个答案:

答案 0 :(得分:4)

当你模拟和指出时,准确模拟端点是非常重要的。如果不这样做,您的测试可能会导致您错误地认为您可以正确地与服务集成。你正在使用正在改变的端点这一事实似乎使这很困难。

无论您是在集成测试或验收测试级别进行,您都应该拥有与真实端点交互的测试,否则您将不知道集成是否真正有效。

在您的情况下,例如,如果库更改或端点被更改并且您的测试失败,那实际上是集成失败,因此检测是一件好事。如果机器出现故障,您可以在测试中检测到该测试,并将测试报告为已跳过而不是失败。

因此,在这种情况下,我会使用真实服务来确保您的软件与第三方组件正确集成。

答案 1 :(得分:2)

你一定要试着嘲笑你的终点。这样做有几个原因:

  • 表现很重要,
  • 对生产环境没有压力,或
  • 如果检测到一些错误,为什么要破坏生产环境?

您可以在this blog中找到有关此问题的更多信息。