【问题标题】:Automate test of web service communication自动测试 Web 服务通信
【发布时间】:2010-09-07 06:32:59
【问题描述】:

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

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

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

是否有其他测试该场景的方法?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我使用soapui 对我们的网络服务进行功能和性能测试,效果很好:)
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      看看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。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多