test example activity android android-studio android-gradle robolectric

android - example - robolectric activity test



Robolectric dice "AndroidManifest.xml not found" (8)

En caso de que sigas teniendo este error con Android Studio 3.0, asegúrate de que tu configuración gradle tenga estos parámetros:

android { ... testOptions { unitTests { includeAndroidResources = true } } }

Al intentar que Robolectric RC3 funcione en Android Studio, me sale

Caused by: java.lang.RuntimeException: build/intermediates/bundles/debug/AndroidManifest.xml not found or not a file; it should point to your project''s AndroidManifest.xml at org.robolectric.manifest.AndroidManifest.validate(AndroidManifest.java:120) at org.robolectric.manifest.AndroidManifest.getResourcePath(AndroidManifest.java:469) at org.robolectric.manifest.AndroidManifest.getIncludedResourcePaths(AndroidManifest.java:475) at org.robolectric.RobolectricTestRunner.createAppResourceLoader(RobolectricTestRunner.java:479) at org.robolectric.RobolectricTestRunner.getAppResourceLoader(RobolectricTestRunner.java:471) at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:73) at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:421) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:234)

Lo intenté

@Config(manifest = "app/src/main/AndroidManifest.xml", constants = BuildConfig.class, sdk=21)

e intenté configurar la ubicación del manifiesto en mi TestRunner, nada funcionó. En el sistema de archivos veo que el manifiesto está en

./app/build/intermediates/manifests/full/debug/AndroidManifest.xml

no en la ubicación que Robolectric está buscando. En un punto, el manifiesto acaba de ser ignorado, luego ocurrió un problema similar para los recursos, la aplicación o Robolectric no pudo encontrar un recurso en bruto que mi aplicación utiliza. Esto está en mi archivo de compilación:

sourceSets { main { java.srcDirs = [''src/main/java''] resources.srcDirs = [''src/main/res''] } test { java.srcDirs = [''src/test/java'', ''src/main/java''] resources.srcDirs = [''src/test/res'', ''src/main/res''] } }

¿Cómo le digo a Robolectric dónde buscar un manifiesto y, lo que es más importante, dónde buscar recursos?

Editar: he comprobado Robolectric de github, lo he construido, lo he instalado en mi repositorio .m2 local, el archivo gradle ahora se refiere a la compilación SNAPSHOT local, y me aseguré de que Gradle no obtenga una nueva versión de un repositorio remoto Luego copié el RobolectricGradleTestRunner en mi proyecto, he cambiado las líneas donde están definidas las ubicaciones de los archivos: no contenía el nombre del módulo. Ahora funciona.


Eso es correcto @Christine. También estoy enfrentando el problema exacto. Y lo que pasa es que el proceso de compilación no crea una carpeta de paquetes bajo intermedios. Y el corredor roboeléctrico personalizado tampoco funcionó. Aquí está el runner personalizado que utilicé. Todavía no descubrí la solución, pero parece que el problema puede estar relacionado con la versión de la herramienta de compilación que se debe usar.

[Actualización] El cambio del directorio de trabajo en la configuración de ejecución de prueba de mi unidad para apuntar al directorio raíz del módulo que se está probando funcionó para mí. [Actualizar]


He enfrentado los mismos errores. Usamos varios sabores y tipos de compilación. Por lo tanto, hay pasos para hacerlo funcionar:

  1. Las pruebas de estudio de Android ejecutan la configuración

También debe establecer el directorio de trabajo en $ MODULE_DIR $ en Windows. robolectric.org/getting-started debería decir eso.

  1. La prueba de unidad debe anotarse de esta manera:

    @RunWith (RobolectricTestRunner.class) @Config (constants = BuildConfig.class, sdk = 21, manifest = "src / main / AndroidManifest.xml", packageName = "com.example.yourproject") public class SomeFragmentTest {


Mismo problema en Android Studio. He resuelto este problema para editar la configuración de Unit4. puedes seguir estas cosas

En Android Studio.

  1. Editar configuraciones
  2. En Junit, debe cambiar el directorio de trabajo a $ MODULE_DIR $.

Lo importante es $ MODULE_DIR $ .

puede hacer referencia a la siguiente captura de pantalla. Gracias.


Puede consultar el mismo problema aquí: https://github.com/robolectric/robolectric/issues/1648

Debe mencionar esto en su código de prueba:

@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18)

Esto le dice al robolectric donde se encuentra su archivo de manifiesto. Esto debería funcionar a menos que cambie los valores de su directorio.

también intente utilizar la plantilla disponible en Internet. Todo está configurado allí. No necesita cambiar los valores de su directorio. Puede obtenerlo desde aquí: https://github.com/robolectric/deckard-gradle

Editar: La forma en que veo es que la excepción ocurre en " build/intermediates/bundles/debug/AndroidManifest.xml " pero usted dice que el archivo está en "app/build/intermediates/manifests/full/debug/AndroidManifest.xml" , Supongo que estos dos son lugares diferentes. Asegúrese de tener el archivo xml en build/intermediates/bundles/debug/AndroidManifest.xml "


Supongo que estás intentando ejecutar las pruebas con JUnit. Puedes probar dos cosas diferentes:

  1. Cree una clase TestRunner personalizada, como se muestra here . Consulte la sección CustomTestRunner, donde básicamente crea un TestRunner que realmente conoce el manifiesto correcto para usar. Especifique sus pruebas para que se ejecuten con su corredor de prueba, con la anotación @Config .
  2. (Mi opción preferida) Vaya a la configuración de JUnit, Ejecutar> Editar configuraciones. Observe el cuadro de texto ''Directorio de trabajo''. Append /app (para OSX y Linux) o /app (Windows), a la ruta escrita en el cuadro de texto. Intenta ejecutar nuevamente y debería funcionar.


Tuve este error después de actualizar AndroidStudio a 2.3.3 y mi plugin gradle también se actualizó. Se resolvió estableciendo el working directory en $MODULE_DIR$ y también actualizando la dependencia de testCompile ''org.robolectric:robolectric:3.0'' de testCompile ''org.robolectric:robolectric:3.0'' a testCompile ''org.robolectric:robolectric:3.4.2'' .

Tenga en cuenta que establecer el working directory mientras la versión robolectric es antigua no lo resolverá.