在Easymock中模拟链式方法调用的简便方法

时间:2012-06-19 16:40:00

标签: easymock

是否有一种模拟此调用的简单方法:

objectA.getB().getC();

现在,我这样做的方式是:

A mockA = EasyMock.createMock(A.class);
B mockB = EasyMock.createMock(B.class);
C mockC = EasyMock.createMock(C.class);

expect(mockA.getB()).andReturn(mockB);
expect(mockB.getC()).andReturn(mockC);

这有点过分,因为我所关心的只是获得mockC。有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:1)

我知道问题是关于EasyMock的,但我不能只是坐在我的手上而不是告诉你关于Mockito的事。 你想做的嘲弄,在Mockito中相当容易。

A mockA = Mockito.mock(A.class, RETURNS_DEEP_STUBS);
C mockC = Mockito.mock(C.class);
Mockito.when(mockA.getB().getC()).thenReturn(mockC);

请注意,Mockito开始作为EasyMock的增强功能,您可以在此处阅读更多相关内容:https://code.google.com/p/mockito/wiki/MockitoVSEasyMock

答案 1 :(得分:0)

不,没有 - 如果您想在测试中使用模拟替换ABC,则需要三个模拟对象。

另一种方法是使用真实的AB类,并仅用模拟对象替换C。然后你的单元测试将测试

  1. 包含objectA.getB().getC()
  2. 的类
  3. A
  4. B
  5. 作为“单位”在一起。这是否有意义取决于具体情况。