Manifiesto y problemas de configuración para conseguir que Robolectric trabaje con Android Studio 1.1.0

Estoy tratando de obtener pruebas Robolectric y trabajar en nuestro proyecto actual, y no tener mucha suerte. Mi preferencia sería que estos se ejecuten dentro de Android Studio 1.1.0+. Esta es mi estructura de proyecto:

Introduzca aquí la descripción de la imagen

Y aquí está mi prueba:

import android.widget.Button; import com.mycompany.android.app.R; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.junit.Assert.assertNotNull; @Config(manifest = "AndroidManifest.xml") @RunWith(RobolectricTestRunner.class) public class SplashActivityTest { private SplashActivity splashActivity; @Before public void setup() { splashActivity = Robolectric.buildActivity(SplashActivity.class).create().start().resume().get(); } @Test public void shouldNotBeNull() { Button signUpButton = (Button) splashActivity.findViewById(R.id.sign_up_button); assertNotNull(signUpButton); Button loginButton = (Button) splashActivity.findViewById(R.id.login_button); assertNotNull(loginButton); } } 

No importa lo que haga para tratar de obtener el marco para encontrar la prueba mediante el cambio de la ruta de acceso al manifiesto, no puede encontrarlo – ya sea que me WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. Mensajes, o API Level XX is not supported - Sorry! Mensajes. Al final, creo que esta es la razón por la que estoy recibiendo los siguientes errores cuando se ejecuta la prueba:

 android.content.res.Resources$NotFoundException: unknown resource 2130903074 

Tengo la opción experimental activada, tengo el plugin Gradle adecuado configurado (las pruebas de unidad de trabajo bien), pero no estoy seguro de lo que estoy perdiendo para obtener pruebas de instrumentación en funcionamiento.

Archivo de compilación a nivel de aplicación:

 apply plugin: 'org.robolectric' testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.9.5' testCompile 'org.robolectric:robolectric:2.4' testCompile 'org.hamcrest:hamcrest-core:1.1' testCompile 'org.hamcrest:hamcrest-library:1.1' testCompile 'org.hamcrest:hamcrest-integration:1.1' 

Archivo de construcción de nivel superior:

 dependencies { classpath 'com.android.tools.build:gradle:1.1.0' classpath 'org.robolectric:robolectric-gradle-plugin:1.0.0' } 

Escribí una guía paso a paso cómo habilitar robolectric con android studio 1.1.0 http://nenick-android.blogspot.de/2015/02/android-studio-110-beta-4-and.html Supongo que lo harás Encontrar una respuesta para su problema. Y un ejemplo https://github.com/nenick/AndroidStudioAndRobolectric

En su caso, el siguiente cambio podría ayudar:

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

Pero lea también @nenick guide

Después de unos pocos días luchando, finalmente descubrí la causa de su pregunta:

 WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. messages, or API Level XX is not supported - Sorry! 

Muchas respuestas que encontré en stackOverFlow me dijeron que agregara la ruta del archivo Manifest al @Config así:

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

Funcionó para uno de mis proyectos, pero cuando abrí un nuevo proyecto y configuré el entorno de prueba, apareció el mismo mensaje de error.

La razón detrás de esto sería el directorio de trabajo diferente de su proyecto. Debe localizar su directorio de trabajo primero y, a continuación, especificar la ruta relativa a él en su @Config (maniest = "…").

¿Dónde puedo encontrar el directorio de trabajo en Android Studio?

 Run -> Edit Configurations -> Junit -> Your Test -> Configuration Tab -> **Working directory:** 

Tome mi directorio de trabajo como un ejemplo, mi directorio de trabajo es

 "/Users/Bible/AndroidstudioProjects/MVP" 

Así que la ruta de acceso a mi AndroidManifest.xml debe ser

 @Config(manifest = "app/src/main/AndroidManifest.xml") 

¡Aqui tienes! Espero que esta respuesta puede hacer su vida más fácil.

He enfrentado los mismos errores. Usamos varios sabores y buildtypes Así que, hay pasos para hacerlo funcionar:

1) Pruebas de estudio de Android ejecutar configuración

Menú Crear variantes

Tienes que establecer el directorio de trabajo en $ MODULE_DIR $ en Windows también. Robolectric.org/getting-started/ debería decir eso.

Ejecutar el menú de configuración

2) Unidad de prueba debe anotarse como este:

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

Aquí tenemos un enlace simple a archivo de manifiesto y packageName

Acabo de cambiar a:

 @RunWith(RobolectricTestRunner.class) 

y funciona. Todas las otras cosas de configuración parece ser innecesario.

Si está utilizando el último Android Studio (1.2.x), entonces su mejor uso también RobolectricGradleTestRunner.class Está diseñado para diferentes sabores de construcción y sabores de prueba. Tampoco es necesario especificar el manifiesto de origen. Recogerá el manifiesto basado en su sabor de la estructura que usted está funcionando. Esto es especialmente útil cuando tiene entornos de compilación diferentes (puesta en escena, producción) y desea ejecutar los casos de prueba en un entorno específico

  • No se puede agregar una configuración con el nombre 'testCompile' ya que una configuración con ese nombre ya existe
  • Android Studio + Robolectric + Gradle Class Not Found Excepción
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.