我正在使用EasyMock为许多协作类编写单元测试。其中一个类(让我们称其为Foo
)打开到远程服务器的网络连接,并将该服务器的XML响应解析为其他类可以使用的内容。
目前,我的测试仅涵盖以下场景:一切正常,远程服务器正常运行,并按预期返回XML。但是,如果我可以模拟Foo
,这样我就可以模拟如果远程服务器关闭或存在其他导致Foo
抛出IOException
的问题时会发生什么,我会更高兴。
我已经看过mock应用程序接口,但我看不到任何类似于请求EasyMock抛出异常的方法。
对我来说,基于Exception
的测试并不是绝对必要的,但我很好奇是否可以使用EasyMock,我认为以这种方式测试Foo
的公共合同会很有用。
以前有人用EasyMock做过类似的事情吗?
参考
发布于 2011-02-17 18:12:04
为了指定要抛出的异常(更准确地说是:
Throwable
s),由expectLastCall()
和expect(T value)
返回的对象提供了方法andThrow(Throwable throwable)
。该方法必须在调用模拟对象(它为该对象指定要抛出的Throwable
)之后在record状态下调用。
每个方法都可能抛出未检查的异常(即RuntimeException
、Error
及其所有子类)。检查过的异常只能从实际引发它们的方法中引发。
例如:
expectLastCall().andThrow(new HibernateException("Something terrible happened"));
expect(query.list()).andThrow(
new HibernateException("Something terrible happened"));
发布于 2011-02-17 18:12:55
您可以在easy mock中使用andThrow(Throwable throwable)
方法。查看documentation标题Working with Exceptions。
例如
expect(mock.voteForRemoval("Document"))
.andThrow(new RuntimeException(), 4);
https://stackoverflow.com/questions/5027533
复制相似问题