EasyMock 如何捕获被测方法调用的 void 方法的参数?

EasyMock how to capture argument of a void method called by method under test?

根据文档,我的理解是 expectLastCall() 用于 void 方法,而不是 expect(),因此我在 Eclipse 中收到投诉。

Capture<String> capturedArgument = new Capture<>();
expect(testObject.voidMethodName(capture(capturedArgument)));

这个How to expect void method call with any argument using EasyMock 不起作用。

TestClass testObj = new TestClass();

Capture<String> capturedArgument = new Capture<>(); //change type as needed
testObj.voidMethodName(capture(capturedArgument));
expectLastCall().atLeastOnce();//adjust number of times as needed
//may need additional replay if you have an additional mocks control object
replay(testObj);

testObj.methodUnderTest();

调用void方法记录即可

Capture<String> capturedArgument = new Capture<>();
testObject.voidMethodName(capture(capturedArgument));
replay(testObject);

就是这样。这隐含地意味着您希望 void 方法被调用一次。添加 expectLastCall().once();expectLastCall(); 意味着完全相同的事情,并且没有用。

您不能调用 expect(),因为 void 方法不会 return 任何东西。所以你不能将它作为参数传递给 expect().

您可能想知道为什么 expectLastCall() 存在。有两个原因:

  1. 对于特殊的 "returns" 比如 expectLastCall().andThrow(e)
  2. 记录特定数量的电话,例如expectLastCall().atLeastOnce()