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 예제를 볼 수 있습니다.