Saltar al contenido principal

FlutterMain.setIsRunningInRobolectricTest en Android eliminado

La API de solo prueba FlutterMain.setIsRunningInRobolectricTest en el motor Android se consolida en FlutterInjector.

Resumen

#

Si escribes pruebas Java JUnit (como pruebas Robolectric) contra la incrustación Java del motor de Flutter y utilizaste la FlutterMain.setIsRunningInRobolectricTest(true) API, reemplázala con lo siguiente:

java
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
        new FlutterInjector.Builder()
            .setFlutterLoader(new FlutterLoader(mockFlutterJNI))
            .build());

Esto debería ser muy poco común.

Contexto

#

La propia clase FlutterMain se está quedando obsoleta y se está reemplazando con la clase FlutterInjector. La clase FlutterMain utiliza una serie de variables y funciones estáticas que dificultan su prueba. FlutterMain.setIsRunningInRobolectricTest() es un mecanismo estático ad-hoc para permitir que las pruebas se ejecuten en la máquina host en la JVM sin cargar la biblioteca nativa libflutter.so (lo cual no se puede hacer en la máquina host).

En lugar de soluciones únicas, todas las inyecciones de dependencias necesarias para las pruebas en la incrustación del motor Android/Java de Flutter se trasladan ahora a la clase FlutterInjector.

Dentro de la clase FlutterInjector, la función Builder setFlutterLoader() permite controlar cómo la clase FlutterLoader localiza y carga la biblioteca libflutter.so.

Descripción del cambio

#

Este commit del motor eliminó la función de prueba FlutterMain.setIsRunningInRobolectricTest(); y el siguiente commit agregó una clase FlutterInjector para ayudar en las pruebas. El PR 20473 refactorizó aún más FlutterLoader y FlutterJNI para permitir simulaciones (mocking) y pruebas adicionales.

para permitir simulaciones (mocking) y pruebas adicionales.

Guía de migración

#

Código antes de la migración:

java
FlutterMain.setIsRunningInRobolectricTest(true);

Código después de la migración:

java
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
        new FlutterInjector.Builder()
            .setFlutterLoader(new FlutterLoader(mockFlutterJNI))
            .build());

Timeline

#

Introducido en la versión: 1.22.0-2.0.pre.133
En la versión estable: 2.0.0