Mockito 参数匹配器 - any()、eq()

Mockito允许我们创建模仿对象,并为我们的测试案例压制行为,我们通常使用when()thenReturn()在模仿对象上嘲笑行为。

Mockito 参数匹配器 - 任何()

有时我们想嘲笑任何类型的论点的行为,在这种情况下,我们可以使用Mockito论点匹配器。Mockito论点方法在‘org.mockito.ArgumentMatchers’类中被定义为静态方法。

 1class Foo {
 2    boolean bool(String str, int i, Object obj) {
 3    	return false;
 4    }
 5
 6    int in(boolean b, List<String> strs) {
 7    	return 0;
 8    }
 9    
10    int bar(byte[] bytes, String[] s, int i) {
11    	return 0;
12    }
13}

让我们来看看一些使用mockito论点匹配器来阻止通用行为的例子。

1Foo mockFoo = mock(Foo.class);
2when(mockFoo.bool(anyString(), anyInt(), any(Object.class))).thenReturn(true);

我们正在使用 bool() 方法来返回任何字符串、整数和对象参数的true

1assertTrue(mockFoo.bool("A", 1, "A"));
2assertTrue(mockFoo.bool("B", 10, new Object()));

Mockito 参数匹配 - eq()

当我们使用参数匹配时,那么所有参数都应该使用参数匹配。

1when(mockFoo.bool(eq("false"), anyInt(), any(Object.class))).thenReturn(false);
2assertFalse(mockFoo.bool("false", 10, new Object()));

对于列表、设置和地图也有参数匹配者。

1when(mockFoo.in(anyBoolean(), anyList())).thenReturn(10);

如果你想与数组匹配,然后使用任何()方法,如下:

1any(byte[].class)
2any(Object[].class)

Mockito 附加赛事

Mockito org.mockito.AdditionalMatchers 类提供一些很少使用的匹配符. 我们可以指定比,小于,执行 OR, AND, NOT 操作的参数。

1when(mockFoo.bar(any(byte[].class), aryEq(new String[] { "A", "B" }), gt(10))).thenReturn(11);

因此,如果我们将任何字节数组的 bar() 方法称为参数,第二个参数称为 { "A", "B" } 和第三个参数大于 10,那么固定方法将返回 11。

1assertEquals(11, mockFoo.bar("abc".getBytes(), new String[] { "A", "B" }, 20));
2assertEquals(11, mockFoo.bar("xyz".getBytes(), new String[] { "A", "B" }, 99));

Mockito 验证论点匹配者

Mockito 参数匹配器只能使用 when() 和 verify() 方法,让我们看看使用 Mockito verify 方法中的参数匹配器的一些例子。

1verify(mockFoo, atLeast(0)).bool(anyString(), anyInt(), any(Object.class));
2verify(mockFoo, atLeast(0)).bool(eq("false"), anyInt(), any(Object.class));

摘要

Mockito 论点匹配方法非常有用,以一种通用的方式阻止行为. 有许多方法来覆盖几乎所有的要求。

您可以从我们的 GitHub 存储库中查看更多 Mockito 示例。

Published At
Categories with 技术
Tagged with
comments powered by Disqus