22

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

目前,我的测试仅包含所有内容都很复杂且远程服务器已启动并运行并按预期返回 XML 的场景。但是,如果可以模拟Foo以便模拟远程服务器关闭时会发生什么,或者有其他一些问题IOException导致Foo.

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

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

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

参考

4

2 回答 2

29

文档中:

为了指定要抛出的异常(更准确地说:Throwables),对象返回expectLastCall()expect(T value)提供方法andThrow(Throwable throwable)。在调用它指定Throwable要抛出的 Mock 对象之后,必须在记录状态下调用该方法。

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

例如:

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

expect(query.list()).andThrow(
        new HibernateException("Something terrible happened"));
于 2011-02-17T10:12:04.497 回答
5

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

例如

 expect(mock.voteForRemoval("Document"))
    .andThrow(new RuntimeException(), 4);
于 2011-02-17T10:12:54.513 回答