2008-08-29 69 views
5

我有一个将消息发送到外部Web服务的应用程序。我使用MSBuildCruisecontrol.NET构建和部署此应用程序。随着CCNET构建和部署应用程序,它还使用NUnit运行一组测试。我现在也想测试Web服务通信。Web服务通信的自动化测试

我的想法是,作为构建过程的一部分,应该生成一个Web服务(基于外部Web服务WSDL)并部署到构建服务器本地Web服务器。所有Web服务应该做的就是接收邮件并将其放在文件系统上,以便我可以使用普通的NUnit来检查它。这也将使开发更容易,因为新开发人员只需运行构建脚本并启动并运行(不必花时间与第三方服务建立连接)。

是否有任何现有的实用程序轻松地嘲讽基于WSDL的Web服务?任何人使用MSBuild做了类似的事情?

是否有测试此场景的其他方式?

回答

3

我刚开始研究http://www.soapui.org/,它似乎可以很好地测试Web服务。另外,也许看看在你的web服务中增加一个抽象层,每个服务调用会直接调用一个可测试的方法(在web范围之外)?我只是在做一个更大的项目,而且它的可测试性很好。

+0

我已经使用soapui进行功能和性能测试我们的web服务,它工作的很棒:) – 2008-10-07 11:26:09

1

一般来说,测试像这样的东西的一个很好的方法是使用mock objects

在工作中,我们使用产品TypeMock来测试Web Service通信和其他外部依赖项。它花钱,所以出于这个原因,它可能不适合你的需求,但我认为这是一个梦幻般的产品。我可以从个人经验告诉你,它与NUnit和CCNet很好地结合在一起。

它有一个非常简单的语法,你基本上说“当这个方法/属性被调用时,我想让你返回这个值。”测试网络故障,文件不存在,当然还有网络服务是很好的。

1

看看NMock2。它是一款开源的嘲笑产品,允许您创建支持丰富和深入交互的界面的“虚拟”实现。

例如,如果你的WS接口被称为IService并具有Data GetData()方法,你可以创建一个要求方法被调用一次,并返回一个新Data对象模拟:

var testService = mockery.NewMock<IService>(); 
Expect 
    .Once 
    .On(testService) 
    .Method("GetService") 
    .WithNoArguments() 
    .Will(
     Return.Value(new Data()); 

在结束请致电mockery.VerifyAllExpectationsHaveBeenMet()以确保实际调用GetData方法。

P.S .:不要将“NMock2”项目与“NMock RC2”混淆,后者在sourceforge上也被称为“nmock2”。 NMock2这个项目似乎已经取代了NMock。

0

在我的工作地点,我们正在使用TypemocknUnit进行单元测试。