2012-04-18 122 views
1

我正在为Web服务API编写适配器。适配器与web服务器同步文件。我想测试的一件事是,如果一个同步失败,而我的适配器正在同步,下一个同步仍然可以拿起所有正确的文件。如何模拟测试中的失败

我的问题是如何在与真实的Web服务交互时模拟失败?例如,如果Web服务API包含:

class WebService { 
    List<String> getFileNamesToSync() { 
     ...... 
    } 

    File getFile(String name) throws SomeException { 
     <talks to the web service API>; 
    } 
} 

我的适配器类:

class MyAdapter { 
    void MyFunction() { 
     List<String> names = webService.getFileNamesToSync(); 
     for(String n : names) { 
      File file = webService.getFile(n); 
      ....... 
     } 
    } 
} 

我如何可以模拟到的GetFile第三次调用应失败例外吗?

我知道我可以通过模拟来实现这一点,但我仍然希望我的其他调用getFile从Web服务返回实际数据?这是我能用Mock实现的吗?或者我必须写我自己的Mock类?

+0

你也可以实现这个w的JUnit。 – Adrian 2012-04-18 19:43:45

+0

这可能不是你要找的东西,但是你可以在你的for循环中通过使用计数器并抛出一个异常(如果计数器== 3(例如))来手动抛出一个异常。 – jahroy 2012-04-18 19:44:50

+0

您可以向其发送一个无效请求来强制执行失败生成,如不存在的文件来获取FileNotFoundException。 – twain249 2012-04-18 19:46:27

回答

1

如果您使用Mockito,您可以创建一个Answer类,它保留一个调用计数器,在大多数调用中调用实际的类,但是当计数器达到幻数时抛出异常。