5

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

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

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

还有其他方法可以测试这种情况吗?

4

5 回答 5

3

我刚开始研究http://www.soapui.org/,它似乎可以很好地测试 Web 服务。

另外,也许看看在您的 Web 服务中添加一个抽象层,每个服务调用都会直接调用一个可测试的方法(在 Web 范围之外)?我只是在我正在处理的一个更大的项目中做到了这一点,它的可测试性运行良好。

于 2008-08-29T16:45:58.120 回答
1

一般来说,测试这样的事情的一个很好的方法是使用模拟对象

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

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

于 2008-10-06T23:00:56.150 回答
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实际调用了该方法。

PS:不要将“NMock2”项目与“NMock RC2”混淆,在sourceforge上也称为“nmock2”。NMock2-the-project 似乎已经取代了 NMock。

于 2008-10-07T10:52:19.320 回答
1

这也可能是某种东西——MockingBird。看起来很有用。

于 2009-02-12T06:34:05.193 回答
0

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

于 2009-04-10T12:25:00.573 回答