代码之家  ›  专栏  ›  技术社区  ›  Karsten

Webservice测试隔离-但是何时验证Webservice本身呢?

  •  0
  • Karsten  · 技术社区  · 15 年前

    你/我应该如何合并测试以确保我精心设计的响应与实际的webservice响应相匹配(我无法控制它)?

    我不想知道怎么做,但是什么时候在哪里?

    我应该为testdata测试创建一个testsuitetestsuite吗?。。。

    3 回复  |  直到 15 年前
        1
  •  1
  •   jpg    15 年前

    我会用这个很好的工具

    Storm

        2
  •  0
  •   Aaron Digulla    15 年前

    如果可以,请将服务安装在一个小的、完全受控的环境中。缺点:当一个新版本推出时,您必须找到一种通知方式。

    如果不可能,那么编写一个调用真正服务并检查关键点的测试(我得到响应了吗?所有的部分都在那里,我期望它们在哪里?我能解析结果吗?)

    避免检查时间戳、结果大小等,这些都是可以并且确实一直在改变的事情。

        3
  •  0
  •   les2    15 年前

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

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

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

    也许比我到目前为止所说的任何废话更重要的是,你可以采纳实用主义程序员和程序作者的建议。也就是说,考虑到您必须不可避免地对您所使用的web服务做出某些假设(假设您无法控制它的实现),您可以添加以下代码:

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

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