Comparador de Mockito y matriz de primitivas

3 minutos de lectura

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

 myMethod( byte[] )

Solo quiero algo como anyByteArray()como hacer eso con Mockito ?

  • ¿Realmente no te importa cuál es el contenido de la matriz de bytes? Veo esto mucho en las pruebas unitarias, donde las personas usan los emparejadores anyX() porque son convenientes, pero en realidad, casi siempre debería preocuparse por lo que se pasa. Si no está usando una Respuesta que realmente consume el valor, probablemente debe coincidir con un argumento esperado real.

    – Matunos

    23 de julio de 2015 a las 1:12


  • @Matunos: Eso es discutible. El uso de any-matchers puede simplificar las pruebas y la próxima persona que mire la prueba no se distraerá con coincidencias innecesariamente precisas y podrá concentrarse en el propósito real de la prueba.

    – Malik Atalla

    21 dic 2015 a las 22:50

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

    –Tomász Przybylski

    10 de marzo de 2016 a las 7:51


lo intentaré any(byte[].class)

  • Si desea verificar un byte específico[] puedes usar AdditionalMatchers.aryEq(expectedArray)

    – John Oxley

    30 de enero de 2013 a las 8:35

  • O Coincidencias.cualquiera().

    – jbyler

    29/10/2013 a las 23:58

  • muchas gracias JohnOxley, simplemente no pude entender por qué el normal eq no estaba funcionando para una matriz int.

    – Bill Naylor

    9 ago 2021 a las 17:10


  • Esto no está funcionando.

    – el yang mágico

    1 de julio a las 7:42

avatar de usuario
Alecio Carvalho

Prueba esto:

AdditionalMatchers.aryEq(array);

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

  • Advertencia para todos: ahora está en desuso, así que elegiría la respuesta votada Mockito.any (byte[].clase)

    – Chexpir

    17 de septiembre de 2018 a las 9:19

Estoy de acuerdo con Mutanos y Alecio. Además, se pueden verificar tantas llamadas de métodos idénticos como sea posible (verificando las llamadas posteriores en el código de producción, el orden de 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 }));

solía Matchers.refEq para esto.

avatar de usuario
Vaina

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

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

avatar de usuario
Koray Tugay

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 deuda técnica.

    – linuxdan

    30 de noviembre de 2018 a las 17:01

  • En mi caso de uso, necesitaba hacer coincidir una matriz, de la cual no era posible saber el orden. No pude encontrar un comparador de Mockito que coincidiera con matrices orden agnósticopara este caso encontré el argThat(ArgumentMatcher<int[]> funcionó bien y no agregó mucha complejidad.

    – Bill Naylor

    29 de octubre de 2020 a las 8:36

  • Tal vez sea útil en los casos en que desee verificar los primeros bytes, etc.

    – rogerdpack

    6 de enero de 2021 a las 15:25

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad