gpt4 book ai didi

web-services - 为第三方提供可测试的网络服务

转载 作者:行者123 更新时间:2023-11-28 21:31:51 26 4
gpt4 key购买 nike

从我的角度来看,应用如下:

我正在制作的应用程序(我们称之为 App1),以及两个第三方 App2 和 App3。

  • App2:想要使用来自 App1 的简化网络服务
  • App1:这就是我所在的位置。来自 App3 的服务在这里已经得到了很好的处理,有一个漂亮、干净的内部 API,易于使用。
  • App3:第三方服务提供商。复杂的服务。要点:没有测试环境,我们针对此所做的一切都是使用生产数据完成的(尽管通常使用单独的测试帐户)。如果我们在这里搞砸了,事情就会发生在现实世界中的真实人物身上。缺乏真正的测试环境不在我的控制范围内。

App3 为我的应用程序 App1 提供一些 Web 服务。 App2 希望我以更简单的方式“转发”那些服务,这样他们就不必重新实现我已经处理过的复杂性。但是将使用我的 Web 服务的 App2 需要有这些服务的可测试版本,以便在实现他们的方面时使用,以自己处理不同的用例。

如何尽可能顺利地实现?

在内部,我现有应用程序的相关部分大致如下所示:

  • 演示 + 网络服务(网络应用程序 + 一个小型网络 API,现在还有这个网络服务)
  • 以下服务的服务外观(为 App3 提供的服务提供干净的 API)
  • 服务(解析、映射、日志记录、对来自 App3 的 SOAP 调用的一些诊断)- 某种“数据层”

Web 服务本身很好,通常只是直接与服务外观对话。但这会让 App2 只剩下生产数据来测试他们的服务(而且这个服务不能在生产数据上测试,这是一个苛刻的写入操作)。因此,我可以告诉我的 IoC 容器使用相关服务外观的单独实现,例如,当设置了给定的配置参数时。然而,由于我只打算“转发”这些服务的有限子集,这将使使用该服务外观的应用程序的其余部分在我们的测试环境中无法使用,这不是一件好事 - 其他东西需要经过测试(甚至针对生产数据)。

我正在考虑在表示/Web 服务层和服务外观层之间引入另一个层,只有这个 Web 服务使用。然后让 IoC 容器在部署到测试环境时提供一个测试版本。

它的优点:

  • 它让我可以将所有提供给第三方使用的网络服务置于从外部看完全可测试的状态,在这种状态下我可以在内部使用 if-else 不同的东西来模拟不同的用例。
  • 它使应用程序的其余部分保持原样,在其他地方必要时使用来自 App3 的实际生产服务进行测试。
  • 将使这个新层单元的可测试版本和“真实交易”版本都可测试

坏事:

  • 创建另一层看似不必要的复杂性,但实际上并没有给应用程序本身带来任何好处
  • 需要一些打开/关闭测试模式的机制(=甚至更多的垃圾代码/配置)
  • 类似垃圾的代码,人们可能会在一两年后将其误认为是原型(prototype)设计,并试图摆脱它

我的想法是否正确,或者是否有其他(明显)不同的解决方案?

  • 发送一个单独的参数来启用测试模式?看起来很冒险,也喜欢在我这边做更多的工作。

最佳答案

App2 [...] needs to have a testable version of those services to use while implementing their side, to handle different use cases themselves

不太清楚你想在这里测试什么。

如果您的意思是测试 App2App1 配合得很好,我倾向于认为让自己“可测试”不是第三方组件的工作 - 它是消费者组件应该测试与 3d 方的通信并验证它是否可以处理其结果。

App2 中,为 App1 的服务创建一个代理。在您的单元测试中,您可以 stub 代理的方法以返回 jar 装测试数据。这些数据可能或多或少接近生产数据,具体取决于您要涵盖的场景。然后在您的代理和真实服务之间创建集成测试,以验证一切是否顺利运行。

关于web-services - 为第三方提供可测试的网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18111022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com