5

有没有一种简单的方法来模拟这个调用:

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。有更简单的方法吗?

4

2 回答 2

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

于 2013-09-18T08:49:52.260 回答
0

不,没有——如果你想用模拟替换A,B并且C在你的测试中,你需要三个模拟对象。

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

  1. 包含的类objectA.getB().getC()
  2. A
  3. B

作为一个“单元”在一起。这是否有意义,取决于具体情况。

于 2012-06-20T22:12:32.667 回答