2009-12-29 45 views
0

我使用存根将我的webservice相关测试与实际的webservices隔离开来。Webservice测试隔离 - 但何时验证webservice本身?

我该如何整合测试以确保我制作的响应符合实际的web服务(我无法控制它)?

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

我应该创建一个测试套件,测试套件进行测试TESTDATA?...

回答

0

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

如果这是不可能的,写一个测试,要求关键点实实在在的服务和检查(我得到回应?是否所有零件那里,在那里我希望他们?我可以分析的结果?)

避免诸如检查时间戳,结果大小等,这是可以并且一直改变的事情。

+0

正如我在我的问题所述,我要求web服务,我没有控制。 – Karsten 2009-12-29 11:18:44

+0

我尽量保持我的答案更一般。首先,这可能会给你新的想法,其次,答案不仅适用于你,也适用于下一个拥有类似(但不是100%相同)问题的人。 :) – 2009-12-29 13:29:53

1

我会用这样的优秀工具

Storm

0

您可以测试使用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); 

这样,如果你的假设不持有,你至少会发现它,而不是潜在地默默地失败!

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