No se puede conseguir que Robotium funcione en Android Studio

Estoy luchando para conseguir que Robotium trabaje en el Android Studio basado en gradles y no puedo encontrar la manera de hacerlo

Este es mi archivo build.gradle

buildscript { dependencies { repositories { mavenCentral() mavenLocal() } classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' repositories { mavenCentral() /* maven { url "https://oss.sonatype.org/content/repositories/snapshots" }*/ } sourceSets { testLocal { java.srcDir file('src/test/java') resources.srcDir file('src/test/resources') } } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 15 targetSdkVersion 17 } sourceSets { instrumentTest.setRoot('src/test') } } dependencies { compile 'com.android.support:support-v4:13.0.+' // Dependencies for the `testLocal` task, make sure to list all your global dependencies here as well testLocalCompile 'junit:junit:4.11' testLocalCompile 'com.google.android:android:4.1.1.4' testLocalCompile 'com.android.support:support-v4:13.0.+' testLocalCompile 'org.robolectric:robolectric:2.1.+' testLocalCompile 'com.jayway.android.robotium:robotium-solo:4.2' // Android Studio doesn't recognize the `testLocal` task, so we define the same dependencies as above for instrumentTest // which is Android Studio's test task instrumentTestCompile 'junit:junit:4.11' instrumentTestCompile 'com.google.android:android:4.1.1.4' instrumentTestCompile 'com.android.support:support-v4:13.0.+' instrumentTestCompile 'org.robolectric:robolectric:2.1.+' instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.2' } task localTest(type: Test, dependsOn: assemble) { testClassesDir = sourceSets.testLocal.output.classesDir android.sourceSets.main.java.srcDirs.each { dir -> def buildDir = dir.getAbsolutePath().split('/') buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/') sourceSets.testLocal.compileClasspath += files(buildDir) sourceSets.testLocal.runtimeClasspath += files(buildDir) } classpath = sourceSets.testLocal.runtimeClasspath } check.dependsOn localTest 

Como puedes ver, estoy usando Robolectric y Robotium El problema que tengo es cuando intento crear una prueba Robotium, como esta:

 import android.test.ActivityInstrumentationTestCase2; import com.dlv.testing.MainActivity; import com.jayway.android.robotium.solo.Solo; public class MainActivityUITest extends ActivityInstrumentationTestCase2<MainActivity> { private Solo solo; public MainActivityUITest() { super(MainActivity.class); } public void setUp() throws Exception { solo = new Solo(getInstrumentation(), getActivity()); } public void testStuff() throws Exception { solo.assertCurrentActivity("Check on first Activity", MainActivity.class); solo.sendKey(Solo.MENU); } @Override public void tearDown() throws Exception { solo.finishOpenedActivities(); } } 

No se puede encontrar ninguna importación, el proyecto no deja de compilar en Android Studio, simplemente falla cuando ejecuto las pruebas y si quito la clase y las referencias en las dependencias, Robolectric funciona muy bien

Por lo que puedo decir, no puedes ejecutar con éxito ninguna prueba de Android Studio todavía (ver ¿Cómo puedo crear pruebas en Android Studio? ). Necesita hacerlo desde la línea de comandos (tenga en cuenta que puede que necesite limpiar primero ./gradlew clean ):

Para ejecutar los ./gradlew connectedInstrumentTest instrumental, utilice ./gradlew connectedInstrumentTest

Para ejecutar la tarea de prueba, use ./gradlew localTest

Para referencia futura cuando Android Studio funciona mejor con la integración de prueba, puede configurarla para ejecutar cualquier tarea de Gradle dada. Vaya a "Editar configuraciones" y haga clic en el botón "+" para agregar uno nuevo. Elija 'Gradle' y luego configurarlo para que apunte al archivo gradle.build correcto y la tarea que desea ejecutar. No estoy seguro de lo que añadiría en la sección "Antes del lanzamiento", sin embargo, si algo.

Todo lo dicho, aquí es cómo conseguí mis pruebas del robotium para funcionar:

  1. Utilicé la configuración de prueba de instrumento integrada porque no pude conseguir que la tarea localTest funcionara (recibí los mismos errores que cuando no encontró ninguna importación). Utilicé la estructura de carpetas predeterminada con la carpeta instrumentTest , pero parece que sólo puede utilizar la línea instrumentTest.setRoot('src/test') para que funcione de la misma manera con su configuración.

  2. He configurado mi archivo build.gradle como este:

     buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' repositories { mavenCentral() } dependencies { // Included library modules ... // My regular dependencies compile 'com.android.support:support-v4:13.0.0' ... // Test dependencies. Notice that all I have to include is robotium // because the rest just works using the instrumentTest configuration instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.3' } android { compileSdkVersion 17 buildToolsVersion "18.0.1" defaultConfig { minSdkVersion 7 targetSdkVersion 16 } } 
  3. Añadí la biblioteca de robotium en Project Structure ( command-; en mi mac) como una librería de maven.

  4. Entonces escribí una prueba como esta:

     import android.test.ActivityInstrumentationTestCase2; import com.example.activity.WelcomeScreen; import com.jayway.android.robotium.solo.Solo; public class WelcomeScreenTest extends ActivityInstrumentationTestCase2<WelcomeScreen> { private Solo solo; public WelcomeScreenTest() { super(WelcomeScreen.class); } protected void setUp() throws Exception { super.setUp(); solo = new Solo(getInstrumentation(), getActivity()); } public void testActivity() { // robotium assert solo.assertCurrentActivity("Welcome Screen", WelcomeScreen.class); // junit assert assertEquals(true, true); } } 
  5. Luego ejecuté la prueba a través de la línea de comandos ./gradlew connectedInstrumentTest y funcionó para mí.

  • No se pudo iniciar intención Intent en un plazo de 45 segundos - robotium
  • Prueba de interfaz de usuario de Espresso para Android: falla en la ejecución de la prueba: Error en la ejecución de la instrumentación debido a 'java.lang.IllegalAccessError'
  • Prueba de centrifugadoras dinámicas espresso
  • Manera correcta de abrir NavigationDrawer y seleccionar elementos en Robotium
  • Cómo rotar la actividad, quiero decir: el cambio de orientación de la pantalla con Espresso?
  • Prueba de la interfaz de usuario de Android con Expresso: No hay actividades en la etapa REANUDADO
  • Android Espresso ListView haga clic en el elemento
  • Android: Robotium vs marco de prueba de Android
  • Tiempo de espera de espera para el resultado de ClearAppData2 al ejecutar Xamarin UI Tests for Android
  • La ejecución falló para la tarea 'app: prepareDebugAndroidTestDependencies'
  • ¿Es posible tomar una captura de pantalla y probar valores de píxeles con espresso?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.