最近,我和我的同事一直在为Java项目编写集成测试。大多数这些集成测试需要至少一个SOAP Web服务调用,LDAP查询或其他依赖于我们不一定能控制的端点的东西。其中一些SOAP / LDAP调用使用的lib仍处于开发阶段。
这最终意味着我们的集成测试有时会在构建期间因机器出现故障,更改lib或更改端点而失败。在做了一些研究之后,我注意到人们在集成测试中使用实时端点似乎相当普遍,但我也发现了有关为什么使用实时端点可能有害的文章(http://martinfowler.com/articles/nonDeterminism.html#RemoteServices)。
我想知道在创建集成测试时更有意义:模拟所有端点,还是使用实时端点?似乎使用实时端点,特别是在不可靠时,会使测试不确定。然而,模拟看起来他们只会带你到目前为止,你将无法测试生产环境中发生的事情。整合测试是否由纯模拟组成,对于验证除回归之外的任何内容有价值吗?
答案 0 :(得分:4)
当你模拟和指出时,准确模拟端点是非常重要的。如果不这样做,您的测试可能会导致您错误地认为您可以正确地与服务集成。你正在使用正在改变的端点这一事实似乎使这很困难。
无论您是在集成测试或验收测试级别进行,您都应该拥有与真实端点交互的测试,否则您将不知道集成是否真正有效。
在您的情况下,例如,如果库更改或端点被更改并且您的测试失败,那实际上是集成失败,因此检测是一件好事。如果机器出现故障,您可以在测试中检测到该测试,并将测试报告为已跳过而不是失败。
因此,在这种情况下,我会使用真实服务来确保您的软件与第三方组件正确集成。
答案 1 :(得分:2)