如何使用EasyMock创建“深度”模拟

时间:2013-01-23 05:32:29

标签: easymock

我有一个间接使用类Foo的测试用例。我不关心Foo对于测试用例的用途。我应该能够嘲笑它。

Foo mock = EasyMock.createMock(Foo.class);

但是,测试用例使用一个在Foo上调用几个方法的库。其中一些方法返回对象,然后该库在这些返回的对象上调用几个方法。出于这个测试的目的,这些对象是什么并不重要,只是它们不是null并且不会导致NullPointerExceptions。

我一直在为这个库调用的每个对象和方法添加一大堆期望调用,如下所示:

Bar bar = EasyMock.createMock(Bar.class);
Baz baz = EasyMock.createMock(Baz.class);
EasyMock.expect(mock.getBar()).andReturn(bar).anyTimes();
EasyMock.expect(bar.getBaz()).andReturn(baz).anyTimes();

基本上,只是一遍又一遍地为这个库最终调用的任何方法创建期望。

同样,对象本身对于我的测试而言并不重要。库大部分都需要它们非空。

有没有办法实现自动化?我想要的是某种“深度模拟”功能,我可以告诉EasyMock自动为通过模拟对象获得的任何对象返回模拟对象。

1 个答案:

答案 0 :(得分:2)

原来,mockito内置了这个功能:

Foo mock = Mockito.mock(Foo.class, Mockito.RETURNS_DEEP_STUBS);