【问题标题】:Webservice test isolation - but when to verify the webservice itself?Webservice 测试隔离 - 但何时验证 Webservice 本身?
【发布时间】:2009-12-29 11:07:18
【问题描述】:

我正在使用存根将我的 web 服务相关测试与实际 web 服务隔离开来。

您/我应该如何合并测试以确保我精心制作的响应与实际的 Web 服务匹配(我无法控制它)?

我不想知道怎么做,但是何时何地?

我应该为 testdata 测试创建一个 testsuite-testsuite 吗?...

【问题讨论】:

    标签: web-services language-agnostic testing


    【解决方案1】:

    我会使用像这个优秀的工具这样的东西

    Storm

    【讨论】:

      【解决方案2】:

      如果可以,请将服务安装在一个小型、完全受控的环境中。缺点:你必须想办法在新版本推出时得到通知。

      如果这不可行,请编写一个调用真实服务并检查重要点的测试(我会得到响应吗?所有部分都在那里吗?我期望它们在哪里?我可以解析结果吗?)

      避免检查时间戳、结果大小等事情,这些事情可以而且确实会一直变化。

      【讨论】:

      • 正如我在问题中所说,我要求提供我无法控制的网络服务。
      • 我尽量让我的答案更笼统一些。一方面,这可能会给你带来新的想法,其次,答案不仅适合你,也适合下一个有类似(但不是 100% 相同)问题的人。 :)
      【解决方案3】:

      您可以使用 EasyMock 测试可能的故障,如下所示:

      public void testDisplayProductsWhenWebServiceThrowsRemoteLookupException() {
           ...
           EasyMock.expect(mockWebService.getProducts(category)).andThrow(new RemoteLookupException());
           ...
           someServiceOrController.someMethodThatUsesMockWebService(...);
      }
      

      对所有可能的故障情况重复。另一种解决方案是自己实现一个虚拟 SEI。使用 JAX-WS,您可以简单地注释一个 java 类,该类生成一个与您使用的客户端一致的接口。所有方法都只能返回虚拟数据。然后,您可以在自己的服务器上部署服务,并将测试环境指向虚拟位置。

      也许比我到目前为止所说的任何废话更重要的是,您可以听取 The Pragmatic Programmer 的作者的建议并使用断言进行编程。也就是说,鉴于您无法控制其实现,您必须不可避免地对所使用的 Web 服务做出某些假设,您可以添加如下代码:

      if(resultOfWebService == null || resultOfWebService.getId() == null)
          throw new AssertionError("WebService violated contract by doing xyz: result => " + resultOfWebServivce);
      

      这样,如果您的假设不成立,您至少会发现它,而不是可能默默地失败!

      您还可以打开架构验证和协议验证,以确保服务按照规范运行。

      【讨论】:

        猜你喜欢
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        • 2011-07-11
        • 2015-10-01
        • 1970-01-01
        • 2010-12-25
        相关资源
        最近更新 更多