2013-07-25 56 views
0

我有一个标准的Web应用程序,它包含一个UI(它有一个WebService API),它引用一个业务层,然后引用一个基于SQL的DAL。这些图层对单元测试有很好的覆盖,这些单元测试使用模拟来替换它们的依赖关系。如何单元测试WebService调用?

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

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

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

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

  1. 该API从WS对象本地对象我传递给消费者正确
  2. 那传输对象的田野里填充正确翻译
+1

我相信你说的是集成测试,不是单元测试 –

+0

我想,我的目标是单元测试他们......我想成为能够在不依赖(或设置)数据库状态的情况下控制通过WS调用返回的内容。 – Liath

+1

您究竟在尝试验证API是干什么的? –

回答

2

你真的API似乎在做两件事情,所以我把这些责任在2个不同的模块,并分别测试它们

  • 翻译器模块。将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/