获取EasyMock模拟对象以抛出异常

Jon*_*Jon 21 java unit-testing easymock

我正在使用EasyMock为许多协作类编写单元测试.其中一个班(让调用它的Foo)打开网络连接到远程服务器,并解析该服务器的XML响应弄成了类其余的可以使用.

目前,我的测试仅包括一切都很糟糕且远程服务器启动并运行并按预期返回XML的场景.但是,如果我可以模拟以便模拟在远程服务器关闭时会发生什么,或者存在导致被抛出的其他问题,我会更高兴.FooIOExceptionFoo

我已经看过EasyMock API了,我看不到任何看起来像是一个让mock去抛出异常的方法.

对我来说,进行Exception基础测试并不是绝对必要的,但我很好奇是否有可能使用EasyMock,而且我认为用Foo这种方式测试公共合同会很有用.

以前有人用EasyMock做过这样的事吗?

参考

Pét*_*rök 28

从文档:

用于指定异常(更准确地:Throwable多个)被抛出,由返回的对象expectLastCall()和expect(T value)提供该方法andThrow(Throwable throwable).在调用Mock对象之后,必须在记录状态下调用该方法,并指定Throwable要抛出的方法.

可以从每个方法抛出未经检查的异常(即RuntimeException,Error及其所有子类).只能从实际抛出它们的方法抛出已检查的异常.

例如:

expectLastCall().andThrow(new HibernateException("Something terrible happened"));

expect(query.list()).andThrow(
        new HibernateException("Something terrible happened"));
Run Code Online (Sandbox Code Playgroud)

  • 如果有人发现这不适用于他们...请确保您使用EasyMock.replay (2认同)

Aug*_*sto 5

您可以在简单的模拟中使用该方法andThrow(Throwable throwable)。检查文档标题“处理异常”。

例如

 expect(mock.voteForRemoval("Document"))
    .andThrow(new RuntimeException(), 4);
Run Code Online (Sandbox Code Playgroud)