0

我有一个标准的 Web 应用程序,它包含一个 UI(它有一个 WebService API),它引用了一个业务层,而业务层又引用了一个基于 SQL 的 DAL。这些层很好地覆盖了单元测试,这些单元测试使用模拟来替换它们的依赖项。

我还有一个 API 库,它允许用户通过代码访问 WS(并处理许多问题,如凭据、url 等)。我想为我的库编写单元测试。

目前我能做到这一点的唯一方法是编写引用库的测试并使用我用来测试 DAL 的相同机制填充数据库。然而,这种方法显然存在缺陷,因为它没有测试我的 API 库类——它测试了整个堆栈!

如何在 WS 下插入模拟(在不同的项目中)?我目前正在使用 MBUnit 和 MOQ 进行测试。

编辑:我的单元测试目前测试两件事:

  1. API 正在从 WS 对象转换为我正确传递给消费者的本地对象
  2. 正确填充传输对象的字段
4

1 回答 1

2

您的 API 似乎确实在做两件事,所以我会将这些职责放在 2 个不同的模块中并分别测试它们

  • 翻译模块。将 API 调用转换为 Web 服务代理调用,并将来自 Web 服务的响应映射回 API 中定义的适当数据结构。要对其进行测试,请使用下面描述的 Adapter 模块的模拟。

  • 一个适配器/代理模块,其工作是调用真正的 Web 服务。您可以使用集成测试对其进行测试。如果唯一的方法是填充数据库并使用完整的堆栈,那么您可能希望将这些测试从主测试套件中移出到频率较低、运行时间较长的测试套件中。

这里讨论了类似的方法:http: //blog.8thlight.com/eric-smith/2011/10/27/thats-not-yours.html和那里http://nf2p.com/dot-net/mocking-web -service-proxies-using-the-adapter-pattern-to-allow-unit-testing/

于 2013-07-25T10:11:57.643 回答