获取 EasyMock 模拟对象以引发异常

2022-09-01 23:10:41

我正在使用EasyMock为许多协作类编写单元测试。其中一个类(我们称之为)打开与远程服务器的网络连接,并将该服务器的XML响应解析为其余类可以使用的内容。Foo

目前,我的测试只包括以下场景:一切都是笨拙的,远程服务器已启动并运行并按预期返回 XML。但是,如果我可以模拟,以便模拟在远程服务器关闭时发生的情况,或者存在导致 .FooIOExceptionFoo

我看了一下EasyMock API,我看不到任何看起来像要求模拟抛出异常的方法。

对我来说,进行基于测试并不是绝对必要的,但我很好奇EasyMock是否可能,我认为以这种方式测试的公共合同会很有用。ExceptionFoo

以前有人用EasyMock做过类似的事情吗?

引用


答案 1

文档中

为了指定要引发的异常(更确切地说:s),由 和 返回的对象提供方法 。在调用它指定要引发的 Mock 对象之后,必须在记录状态中调用该方法。ThrowableexpectLastCall()expect(T value)andThrow(Throwable throwable)Throwable

可以从每个方法中引发未经检查的异常(即 及其所有子类)。已检查的异常只能从实际引发异常的方法中引发。RuntimeExceptionError

例如:

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

expect(query.list()).andThrow(
        new HibernateException("Something terrible happened"));

答案 2

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

例如

 expect(mock.voteForRemoval("Document"))
    .andThrow(new RuntimeException(), 4);

推荐