Рубрики
Без рубрики

Сопоставители аргументов Mockito – любые(), эквалайзер()

Сопоставители аргументов Mockito, Mockito any(), метод Mockito с гибкими аргументами, Сопоставители аргументов, класс дополнительных сопоставителей, использование Mockito eq ().

Автор оригинала: Pankaj Kumar.

Mockito позволяет нам создавать макеты объектов и заглушать поведение для наших тестовых случаев. Обычно мы высмеиваем поведение, используя when() и затем возвращаем() на макет объекта.

Сопоставители аргументов Mockito – любые()

Иногда мы хотим поиздеваться над поведением любого аргумента данного типа, в этом случае мы можем использовать сопоставители аргументов Mockito. Методы аргументов Mockito определены в org.mockito.Argumentmatcher Класс как статические методы.

Допустим, у нас есть класс, определенный как:

class Foo {
	boolean bool(String str, int i, Object obj) {
		return false;
	}

	int in(boolean b, List strs) {
		return 0;
	}
	
	int bar(byte[] bytes, String[] s, int i) {
		return 0;
	}
}

Давайте рассмотрим несколько примеров использования сопоставителей аргументов mockito для подавления общего поведения.

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

Мы отключаем метод bool (), чтобы вернуть “true” для любых строковых, целых и объектных аргументов. В этом случае все приведенные ниже утверждения пройдут:

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

Сопоставитель аргументов Mockito – eq()

Когда мы используем сопоставители аргументов, то все аргументы должны использовать совпадения. Если мы хотим использовать определенное значение для аргумента, то мы можем использовать метод eq () .

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

Также существуют сопоставители аргументов для списка, набора и карты.

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

Если вы хотите сопоставить массивы, используйте любой() метод, подобный этому:

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

Дополнительные функции Mockito

Мокито орг.мокито.Дополнительные сопоставители класс предоставляет некоторые редко используемые сопоставители. Мы можем указать аргументы, которые должны быть больше, меньше, выполнять операции ИЛИ И НЕ. Мы также можем проверить равенство массивов.

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

Поэтому, если мы вызовем метод bar() с любым массивом байтов в качестве аргумента, вторым аргументом в виде { “A”, “B” } и третьим аргументом, превышающим 10, то заглушенный метод вернет 11.

Приведенные ниже утверждения подойдут для нашего метода заглушки.

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

Mockito Проверяет Сопоставление Аргументов

Сопоставители аргументов Mockito можно использовать только с методами when() и verify (). Давайте рассмотрим несколько примеров использования сопоставителей аргументов в методе проверки Mockito.

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

Резюме

Методы Mockito argumentmatcher очень полезны для общего описания поведения. Существует множество методов, позволяющих удовлетворить практически все требования.