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()
来捕获整数参数。