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

Java 在集成测试中使用活动端点与使用模拟端点,java,testing,integration-testing,Java,Testing,Integration Testing,最近,我的同事和我一直在为一个Java项目编写集成测试。这些集成测试中的大多数至少需要一个soapweb服务调用、LDAP查询或其他依赖于我们不必控制的端点的东西。其中一些SOAP/LDAP调用使用的LIB也仍在开发中 这意味着,在构建过程中,当机器停机、库更改或端点更改时,我们的集成测试有时会失败。在做了一些研究之后,我注意到人们在集成测试中使用活动端点似乎相当普遍,但我也发现了一些关于为什么使用活动端点可能有害的文章() 我想知道在创建集成测试时什么更有意义:模拟所有端点,还是使用活动端点?

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

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


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

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

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

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


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

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

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

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

谢谢您的回复。我明白你的意思,但一个可能由于多种原因(库更改、机器故障、端点更改等)而失败的测试不是不确定的吗?如果我不得不在某个时候忽略它,这是一个好的测试吗?我觉得这是一个滑坡,导致了一个我不能依赖的测试。会有一些不确定的行为,但这将真正代表您的生产系统。如果你不能控制这些服务,你在那里做不了什么,但是如果我对真正的服务进行测试,我会觉得更有信心。您可以为某些测试编写一个模拟,但这会增加一个很大的维护负担。不管你是否在某种程度上模拟服务,我肯定会进行一些符合实际情况的测试。这是有道理的。在进一步阅读之后,我发现了Martin Fowler的另一篇文章——因为我的端点有点不可靠,我认为这可能会有帮助——假设测试加倍的维护不会成为负担,这是一个很好的方法。祝你好运