Mockito ArgumentCaptor 用于捕捉嘲笑方法的论点. ArgumentCaptor 与 Mockito verify() 方法一起使用,以便在任何方法被调用时通过论点。
论 论 论
我们可以为任何类创建ArgumentCaptor
实例,然后使用其capture()
方法与verify()
方法一起使用。最后,我们可以从getValue()
和getAllValues()
方法中获取被捕获的参数。当我们捕获了单个参数时,可以使用getValue()
方法。
马克思 论点 例子
假设我们有一个定义为:
1class MathUtils {
2 public int add(int x, int y) {
3 return x + y;
4 }
5
6 public boolean isInteger(String s) {
7 try {
8 Integer.parseInt(s);
9 } catch (NumberFormatException e) {
10 return false;
11 }
12 return true;
13 }
14
15 public long squareLong(long l) {
16 return l*l;
17 }
18}
我们可以编写我们的测试案例,并使用如下所示的 ArgumentCaptor。
1@Test
2void test() {
3 MathUtils mockMathUtils = mock(MathUtils.class);
4 when(mockMathUtils.add(1, 1)).thenReturn(2);
5 when(mockMathUtils.isInteger(anyString())).thenReturn(true);
6
7 ArgumentCaptor acInteger = ArgumentCaptor.forClass(Integer.class);
8 ArgumentCaptor acString = ArgumentCaptor.forClass(String.class);
9
10 assertEquals(2, mockMathUtils.add(1, 1));
11 assertTrue(mockMathUtils.isInteger("1"));
12 assertTrue(mockMathUtils.isInteger("999"));
13
14 verify(mockMathUtils).add(acInteger.capture(), acInteger.capture());
15 List allValues = acInteger.getAllValues();
16 assertEquals(List.of(1, 1), allValues);
17
18 verify(mockMathUtils, times(2)).isInteger(acString.capture());
19 List allStringValues = acString.getAllValues();
20 assertEquals(List.of("1", "999"), allStringValues);
21}
莫克蒂奥·卡普特
我们可以使用@Captor
注释来创建字段级的参数采集器,因此,而不是将字段级的ArgumentCaptor初始化为:
1ArgumentCaptor acLong = ArgumentCaptor.forClass(Long.class);
我们可以使用 @Captor 作为:
1@Captor ArgumentCaptor acLong;
请注意,我们必须在测试方法之前拨打MockitoAnnotations.initMocks(this);
以便通过Mockito框架进行初始化。
莫克蒂托 @Captor 例子
以下是 @Captor 注释的一个简单示例。
1class MockitoArgumentCaptorExamples {
2
3 @Captor ArgumentCaptor acLong;
4
5 @Test
6 void test() {
7 MathUtils mockMathUtils = mock(MathUtils.class);
8 when(mockMathUtils.squareLong(2L)).thenReturn(4L);
9 assertEquals(4L, mockMathUtils.squareLong(2L));
10 verify(mockMathUtils).squareLong(acLong.capture());
11 assertTrue(2 == acLong.getValue());
12 }
13}
您可以从我们的 GitHub 存储库查看完整的代码和更多 Mockito 示例。