Simulacros de clases y métodos finales con Mockito

1. Información general

En este breve artículo, nos centraremos en cómo simular clases y métodos finales, utilizando Mockito.

Al igual que con otros artículos enfocados en el marco Mockito (como Mockito Verify, Mockito When / Then y Mockito's Mock Methods) usaremos la clase MyList que se muestra a continuación como colaborador en casos de prueba.

Agregaremos un nuevo método para este tutorial:

public class MyList extends AbstractList { final public int finalMethod() { return 0; } }

Y también lo ampliaremos con una subclase final :

public final class FinalList extends MyList { @Override public int size() { return 1; } } 

2. Configurar Mockito para métodos y clases finales

Antes de que Mockito pueda usarse para simular clases y métodos finales, debe configurarse.

Necesitamos agregar un archivo de texto al directorio src / test / resources / mockito-extensions del proyecto llamado org.mockito.plugins.MockMaker y agregar una sola línea de texto:

mock-maker-inline 

Mockito busca archivos de configuración en el directorio de extensiones cuando se carga. Este archivo permite la burla de métodos y clases finales.

3. Simulacros de un método final

Una vez que Mockito está configurado correctamente, un método final se puede burlar como cualquier otro :

@Test public void whenMockFinalMethodMockWorks() { MyList myList = new MyList(); MyList mock = mock(MyList.class); when(mock.finalMethod()).thenReturn(1); assertNotEquals(mock.finalMethod(), myList.finalMethod()); } 

Al crear una instancia concreta y una instancia simulada de MyList , podemos comparar los valores devueltos por ambas versiones de finalMethod () y verificar que se llame al simulacro.

4. Simulacros de una clase final

Burlarse de una clase final es tan fácil como burlarse de cualquier otra clase:

@Test public void whenMockFinalClassMockWorks() { FinalList finalList = new FinalList(); FinalList mock = mock(FinalList.class); when(mock.size()).thenReturn(2); assertNotEquals(mock.size(), finalList.size()); } 

De manera similar a la prueba anterior, creamos una instancia concreta y una instancia simulada de nuestra clase final, simulamos un método y verificamos que la instancia simulada se comporta de manera diferente.

5. Conclusión

En este tutorial rápido, cubrimos cómo simular clases y métodos finales con Mockito usando una extensión de Mockito.

Los ejemplos completos, como siempre, se pueden encontrar en GitHub.