【发布时间】:2012-03-06 15:08:47
【问题描述】:
我想模拟一个类,以便在调用任何方法时抛出异常。我想这样做的原因是,我不希望在我的测试中出现 NullpointerException,我宁愿模拟每个对象,声明为一个实例变量,它是带有异常东西的空值,所以如果它上面有一个方法被调用我得到一个适当的异常,我立即看到出了什么问题。 EasyMock 3.0 是否提供了这样的东西,还是我需要以其他方式来做?
提前致谢
【问题讨论】:
我想模拟一个类,以便在调用任何方法时抛出异常。我想这样做的原因是,我不希望在我的测试中出现 NullpointerException,我宁愿模拟每个对象,声明为一个实例变量,它是带有异常东西的空值,所以如果它上面有一个方法被调用我得到一个适当的异常,我立即看到出了什么问题。 EasyMock 3.0 是否提供了这样的东西,还是我需要以其他方式来做?
提前致谢
【问题讨论】:
这不是 EasyMock 的默认行为吗?一旦调用EasyMock.verify(mocks),对模拟对象的任何意外调用都会导致异常。请参阅 EasyMock 文档 - “Nice Mocks”部分对此进行了解释:http://easymock.org/EasyMock3_0_Documentation.html
以下测试对我来说失败了AssertionError,这应该是你要找的:
@Test
public void testFoo() {
List list = EasyMock.createMock(List.class);
EasyMock.replay(list);
list.size();
EasyMock.verify(list);
}
【讨论】:
考虑到相同的列表示例,当它被调用时,您可能会遇到异常
List list = EasyMock.createMock(List.class);
EasyMock.expect(list.size()).andThrow(new OurOwnException()).anyTimes();
EasyMock.replay(list);
每当调用 size() 方法时,这总是会抛出您的自定义异常。 你期待这种行为吗?
【讨论】:
list 上的每种方法 执行此操作?在示例中仅配置了 size 方法,并且为每个方法单独配置是不切实际的。