Mockito Matcher y variedad de primitivas


226

Con Mockito, quiero verify()una llamada al método byte[]en su lista de argumentos, pero no encontré cómo escribir esto.

 myMethod( byte[] )

Solo quiero algo como anyByteArray(), ¿cómo hacer eso con Mockito?


¿Realmente no te importa cuáles son los contenidos de la matriz de bytes? Veo esto mucho en las pruebas unitarias, donde las personas usan los comparadores anyX () porque son convenientes, pero de manera realista casi siempre debería importarle lo que se pasa. Si no está usando una respuesta que realmente consuma el valor, probablemente debe coincidir con un argumento esperado real.
Matunos

@Matunos: Eso es discutible. El uso de any-matchers puede hacer que las pruebas sean más simples y la siguiente persona que mira la prueba no se distraerá con una correspondencia innecesariamente precisa y puede centrarse en el propósito real de la prueba.
Malik Atalla

@tbruelle: Tenga en cuenta que cada matriz en Java es un objeto. Eso te ayudaría al principio.
Tomasz Przybylski

Respuestas:


424

lo intentaré any(byte[].class)


34
Si desea verificar un byte específico [] puede usarloAdditionalMatchers.aryEq(expectedArray)
John Oxley

55
O Matchers. <Byte []> any ().
jbyler


12

Prefiero usar Matchers.<byte[]>any(). Esto funcionó para mí.


1
Advertencia para todos: ahora está en desuso, así que iría por la respuesta votada Mockito.any (byte []. Class)
Chexpir

10

Estoy de acuerdo con Mutanos y Alecio. Además, uno puede verificar tantas llamadas a métodos idénticos como sea posible (verificando las llamadas posteriores en el código de producción, el orden de la verificación no importa). Aquí está el código:

import static org.mockito.AdditionalMatchers.*;

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


0

Puede usar Mockito.any () cuando los argumentos son matrices también. Lo usé así:

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

0

Lo que funciona para mí fue org.mockito.ArgumentMatchers.isA

por ejemplo:

isA(long[].class)

Eso funciona bien.

La diferencia de implementación entre ellos es:

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

Siempre puedes crear un Matcher personalizado usando 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;
    }
}));

Escribir un comparador personalizado, cuando Mockito es capaz de manejar este caso de uso, solo agrega deudas técnicas.
linuxdan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.