从我的观点来看,申请如下:
我正在制作的应用程序(我们称之为App1)和两个第三方App2和App3。
App3为我的应用程序App1提供了一些Web服务。 App2希望我以更简单的方式“转发”这些服务,因此他们不必重新实现我已经处理过的复杂性。但是,消费我的Web服务的App2需要在实现他们的一方时使用这些服务的可测试版本,以便自己处理不同的用例。
在内部,我现有应用程序的相关部分看起来大致如下:
Web服务本身很好,通常只是直接与服务外观交谈。但是,这将使App2只使用生产数据来测试他们的服务(而且这种服务无法在生产数据上进行测试,这是一种严酷的写入操作)。因此,例如,当设置了给定的配置参数时,我可以告诉我的IoC容器使用相关服务外观的单独实现。但是,由于我只是“转发”这些服务的有限子集,这将使得使用该服务外观的应用程序的其余部分在我们的测试环境中无法使用,这不是一件好事 - 其他东西需要是测试(甚至是生产数据)。
我正在考虑在演示文稿/ Web服务层和服务外观之间引入另一层,只有这个Web服务才能使用。然后让IoC容器在部署到测试环境时调整其测试版本。
我在考虑正确的事情,还是有其他(显着)不同的解决方案?
答案 0 :(得分:1)
App2 [...]需要使用这些服务的可测试版本 在实施他们的一面时,处理不同的用例 本身
目前还不清楚你想在这里测试什么。
如果你的意思是测试App2
与App1
配合得很好,我倾向于认为让自己“可测试”不是第三方组件的工作 - 它应该是测试与3d通信的消费者组件派对并验证它是否能够处理其结果。
在App2
中,为App1
的服务创建代理。在单元测试中,您可以存根代理的方法来返回预设的测试数据。这些数据可能或多或少地接近生产数据,具体取决于您要覆盖的方案。然后在代理和真实服务之间创建集成测试,以验证一切运行顺利。