如何单元测试Web服务调用?

时间:2013-07-25 08:50:35

标签: web-services api unit-testing mocking

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您的API似乎真的做了两件事,所以我将这些职责放在两个不同的模块中并单独测试

  • 转换器模块。将API调用转换为Web服务代理调用,并将Web服务的响应映射回API中定义的适当数据结构。要测试它,请使用下面描述的适配器模块的模拟。

  • 适配器/代理模块,其作用是调用真实的Web服务。您可以使用集成测试来测试它。如果唯一的方法是填充数据库并运行完整堆栈,您可能希望将这些测试从主测试套件中移出到不太频繁,长时间运行的测试套件中。

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