获取EasyMock模拟对象以抛出exception
我正在使用EasyMock为许多协作类编写unit testing。 其中一个类(称为Foo
)打开与远程服务器的网络连接,并将该服务器的XML响应解析为其余类可以使用的内容。
目前,我的测试仅包括一切都很糟糕且远程服务器启动并运行并按预期返回XML的场景。 但是,如果我可以模拟Foo
以便模拟在远程服务器关闭时会发生什么,或者存在导致Foo
抛出IOException
其他问题,我会更高兴。
我看过EasyMock API,我看不到任何看起来像是要求模拟抛出exception的方法。
对于我来说,进行基于Exception
的测试对我来说并不是绝对必要的,但我很好奇是否可以使用EasyMock,而且我认为以这种方式测试Foo
的公共合同会很有用。
以前有人用EasyMock做过这样的事吗?
参考
- EasyMock API
从文档 :
为了指定要抛出的exception(更确切地说:
Throwable
s),expectLastCall()
和expect(T value)
返回的对象提供方法andThrow(Throwable throwable)
。 在调用Mock对象之后,必须在记录状态下调用该方法,该Mock对象指定要抛出的Throwable
。可以从每个方法抛出未经检查的exception(即
RuntimeException
,Error
及其所有子类)。 只能从实际抛出它们的方法抛出已检查的exception。
例如:
expectLastCall().andThrow(new HibernateException("Something terrible happened")); expect(query.list()).andThrow( new HibernateException("Something terrible happened"));
你可以在easy mock中使用方法andThrow(Throwable throwable)
。 查看文档 – 标题使用例外 。
例如
expect(mock.voteForRemoval("Document")) .andThrow(new RuntimeException(), 4);