Testear ViewModels que utilizan coroutinas puede volverse repetitivo al configurar manualmente dispatchers en cada test. Crear una regla personalizada usando la clase TestWatcher de JUnit permite encapsular esta lógica repetitiva. Así, se genera un código más limpio, reutilizable y menos susceptible a errores en pruebas.
¿Por qué utilizar TestWatcher para testear coroutinas?
La clase TestWatcher de la librería JUnit identifica dos escenarios clave: el inicio y el fin de cada test. Al extenderla, se simplifica notablemente la configuración de coroutinas en los tests, automatizando acciones antes y después de su ejecución. Esto evita configurar manualmente Dispatchers.setMain() y Dispatchers.resetMain().
¿Cómo crear una regla personalizada para testear coroutinas?
Para crear nuestra propia regla, seguimos estos pasos:
Creamos una clase llamada MainDispatcherRule dentro del folder utils.
Extendemos de la clase TestWatcher.
Definimos el dispatcher por defecto como UnconfinedTestDispatcher().
Sobrescribimos métodos específicos:
Método starting: llamado al inicio del test; configura el main dispatcher utilizando Dispatchers.setMain() con nuestro dispatcher definido.
Método finished: llamado al finalizar el test; restablece dispatcher principal mediante Dispatchers.resetMain().