自动化Web服务通信测试

时间:2008-08-29 16:35:54

标签: web-services msbuild build-process nunit cruisecontrol.net

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

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

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

是否有测试此方案的其他方法?

5 个答案:

答案 0 :(得分:3)

我刚开始研究http://www.soapui.org/,看起来它可以很好地测试网络服务。

另外,也许可以考虑在Web服务中添加抽象层,每个服务调用都会直接调用可测试的方法(在Web范围之外)?我刚刚做了一个我正在研究的更大的项目,它的可测试性很好。

答案 1 :(得分:1)

通常,测试此类内容的一种非常好的方法是使用mock objects

在工作中,我们使用产品TypeMock来测试Web服务通信和其他外部依赖项。这需要花钱,因此可能不适合您的需求,但我认为这是一个很棒的产品。我可以从个人经验告诉你,它与NUnit和CCNet很好地集成。

它有一个非常简单的语法,您基本上会说“当调用此方法/属性时,我希望您返回此值。”它非常适合测试网络故障,文件不存在,当然还有网络服务等。

答案 2 :(得分: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-the-project似乎已经取代了NMock。

答案 3 :(得分:1)

这也可能是 - MockingBird。看起来很有用。

答案 4 :(得分:0)

在我的工作场所,我们使用TypemocknUnit进行单元测试。