在集成测试中使用活动端点vs使用模拟端点



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

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

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

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

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

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

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

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

  • 性能问题,
  • 对生产环境无压力,或
  • 如果检测到一些bug,为什么要破坏生产环境?

你可以在这个博客中找到更多关于这个问题的信息。

最新更新