EasyMock捕获参数
时间:2020-02-23 14:41:17 来源:igfitidea点击:
有时我们想对任何输入参数的行为进行存根,所以我们使用参数匹配器。
如果要在调用这些存根方法时知道参数,则必须使用捕获参数的匹配器。
EasyMock捕获参数
EasyMock捕获参数需要执行以下步骤:
使用
EasyMock.newCapture()方法创建Capture实例。使用
capture(Capture)参数匹配器和expect来匹配任何参数,并捕获它以备后用。如果要捕获原始类型,则有特定的方法,例如
captureInt(),captureBoolean()等。
单参数捕获
如果捕获单个参数,则可以从Capture.getValue()方法获取其值。
让我们举一个简单的例子来说明单个论点。
package com.theitroad.easymock;
import static org.easymock.EasyMock.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import org.easymock.Capture;
import org.easymock.CaptureType;
import org.junit.jupiter.api.Test;
import com.theitroad.utils.MathUtils;
public class EasyMockCaptureAgrumentExample {
@Test
public void test_single_call_arg_capture() {
ArrayList<String> mockList = mock(ArrayList.class);
Capture<String> captureSingleArgument = newCapture();
expect(mockList.add(capture(captureSingleArgument))).andReturn(true);
replay(mockList);
assertTrue(mockList.add("Hello Pankaj"));
System.out.println(captureSingleArgument.getValue()); //Hello Pankaj
verify(mockList);
}
}
捕获多个呼叫的参数
如果多次调用存根方法,我们可以使用getValues()来获取参数列表。
@Test
public void test_multiple_calls_args_catcher() {
ArrayList<Integer> mockList = mock(ArrayList.class);
Capture<Integer> captureArguments = newCapture(CaptureType.ALL);
expect(mockList.add(captureInt(captureArguments))).andReturn(true).times(2);
replay(mockList);
assertTrue(mockList.add(10));
assertTrue(mockList.add(20));
System.out.println(captureArguments.getValues()); //[10, 20]
verify(mockList);
}
捕获多个参数
我们还可以捕获多个参数方法。
我们可以将不同的Capture实例用于不同的参数类型,也可以使用相同的实例。
@Test
public void test_multiple_args_catcher() {
MathUtils mock = mock(MathUtils.class);
Capture<Integer> captureArguments = newCapture(CaptureType.ALL);
expect(mock.add(captureInt(captureArguments), captureInt(captureArguments))).andReturn(10).times(2);
replay(mock);
assertEquals(mock.add(0,10), 10);
assertEquals(mock.add(1, 9), 10);
System.out.println(captureArguments.getValues()); //[0, 10, 1, 9]
verify(mock);
}
注意,我在上面的示例中使用captureInt()来捕获整数参数。

