3

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

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

我想知道在创建集成测试时什么更有意义:模拟所有端点,还是使用实时端点?似乎使用实时端点,尤其是在不可靠的情况下,会使测试变得不确定。但是,模拟似乎只能带您到此为止,并且您将无法测试在类似生产的环境中发生的情况。由纯模拟组成的集成测试对于验证除回归之外的任何内容是否有价值?

4

2 回答 2

5

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

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

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

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

于 2013-03-07T03:24:14.883 回答
2

您绝对应该尝试模拟您的端点。这样做有几个原因:

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

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

于 2016-03-18T11:52:10.657 回答