使EasyMock模拟对象引发异常


问题内容

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

目前,我的测试仅涉及所有情况都是笨拙且远程服务器已启动并正在运行并按预期返回XML的情况。但是,如果可以进行模拟,以便模拟远程服务器关闭或发生其他问题导致抛出,该怎么办,我
更高兴。Foo``IOException``Foo

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

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

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

参考文献


问题答案:

文档中

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

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

例如:

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

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