Mockito 매처 및 기본 배열


226

Mockito를 사용하면 인수 목록에 verify()메소드 호출을 byte[]하고 싶지만 이것을 작성하는 방법을 찾지 못했습니다.

 myMethod( byte[] )

나는 단지 anyByteArray()Mockito로 어떻게 할 것인가?


바이트 배열의 내용이 무엇인지 정말로 상관하지 않습니까? 나는 사람들이 편리하기 때문에 anyX () 매처를 사용하는 단위 테스트에서 이것을 많이 보았지만 실제로는 전달되는 내용을 거의 항상 신경 써야합니다. 실제로 값을 소비하는 Answer를 사용하지 않으면 아마도 실제 예상 인수와 일치해야합니다.
Matunos

@Matunos : 논쟁의 여지가 있습니다. 모든 matcher를 사용하면 테스트가 간단 해지고 테스트를 보는 다음 사람이 불필요하게 정확하게 일치하여 방해받지 않고 테스트의 실제 목적에 집중할 수 있습니다.
Malik Atalla

@ tbruelle : Java의 모든 배열은 객체라는 것을 명심하십시오. 처음에는 도움이 될 것입니다.
Tomasz Przybylski

답변:


424

나는 시도 할 것이다 any(byte[].class)


34
특정 바이트를 확인하려면 []AdditionalMatchers.aryEq(expectedArray)
John Oxley

5
또는 Matchers. <byte []> any ().
jbyler


12

오히려 사용하고 싶습니다 Matchers.<byte[]>any(). 이것은 나를 위해 일했습니다.


1
모두를위한 경고 : 이제 더 이상 사용되지 않으므로 투표 된 답변 Mockito.any (byte []. class)
Chexpir

10

Mutanos와 Alecio에 동의합니다. 또한 가능한 한 많은 동일한 메소드 호출을 확인할 수 있습니다 (프로덕션 코드에서 후속 호출을 확인하면 확인 순서는 중요하지 않습니다). 코드는 다음과 같습니다.

import static org.mockito.AdditionalMatchers.*;

    verify(mockObject).myMethod(aryEq(new byte[] { 0 }));
    verify(mockObject).myMethod(aryEq(new byte[] { 1, 2 }));


0

인수가 배열 인 경우 Mockito.any ()를 사용할 수 있습니다. 나는 이것을 다음과 같이 사용했다 :

verify(myMock, times(0)).setContents(any(), any());

0

나를 위해 일한 것은 org.mockito.ArgumentMatchers.isA

예를 들면 다음과 같습니다.

isA(long[].class)

잘 작동합니다.

서로의 구현 차이는 다음과 같습니다.

public static <T> T any(Class<T> type) {
    reportMatcher(new VarArgAware(type, "<any " + type.getCanonicalName() + ">"));
    return Primitives.defaultValue(type);
}

public static <T> T isA(Class<T> type) {
    reportMatcher(new InstanceOf(type));
    return Primitives.defaultValue(type);
}

-1

당신은 항상 사용하여 사용자 정의 매처를 만들 수 있습니다 argThat

Mockito.verify(yourMockHere).methodCallToBeVerifiedOnYourMockHere(ArgumentMatchers.argThat(new ArgumentMatcher<Object>() {
    @Override
    public boolean matches(Object argument) {
        YourTypeHere[] yourArray = (YourTypeHere[]) argument;
        // Do whatever you like, here is an example:
        if (!yourArray[0].getStringValue().equals("first_arr_val")) {
            return false;
        }
        return true;
    }
}));

Mockito가이 사용 사례를 처리 할 수있을 때 사용자 정의 매처를 작성하면 기술 부채 만 추가됩니다.
linuxdan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.