웹사이트 검색

Mockito 인수 매처 - any(), eq()


Mockito를 사용하면 모의 개체를 만들고 테스트 사례에 대한 동작을 스텁할 수 있습니다. 우리는 일반적으로 모의 개체에서 when()thenReturn()을 사용하여 동작을 모의합니다.

Mockito 인수 매처 - any()

때때로 우리는 주어진 유형의 인수에 대한 동작을 모의하기를 원합니다. 이 경우 Mockito 인수 매처를 사용할 수 있습니다. Mockito 인수 메서드는 org.mockito.ArgumentMatchers 클래스에서 정적 메서드로 정의됩니다. 다음과 같이 정의된 클래스가 있다고 가정해 보겠습니다.

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

	int in(boolean b, List<String> 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);

모든 문자열, 정수 및 개체 인수에 대해 "true\를 반환하기 위해 bool() 메서드를 스터빙하고 있습니다. 이 경우 아래의 모든 어설션이 통과됩니다.

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() 메서드를 사용하십시오.

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

Mockito 추가 매처

Mockito org.mockito.AdditionalMatchers 클래스는 거의 사용되지 않는 매처를 제공합니다. 보다 크거나 작거나 OR, AND, NOT 연산을 수행하도록 인수를 지정할 수 있습니다. 배열이 동일한지 확인할 수도 있습니다.

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 인수 매처 메서드는 일반적인 방식으로 동작을 스터빙하는 데 매우 유용합니다. 거의 모든 요구 사항을 충족하는 많은 방법이 있습니다.

GitHub 리포지토리에서 더 많은 Mockito 예제를 볼 수 있습니다.