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
- Prueba del espresso del androide: prueba vacía suite. No se encontraron pruebas
- No se puede ejecutar Robotium en Android Studio con sólo APK
- Robotium. WaitForActivity () devuelve false para la actividad incrustada en TabHostActivity
- No hay identificación para mi prueba de interfaz de usuario de Android
- Error de prueba Espresso: AppNotIdleException
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
- Espresso Nested Recycler Vistas Prueba de interfaz de usuario
- ¿Cómo usar Espresso UI Testing for React Native?
- Espresso cómo hacer clic en un ImageView colocado en el primer elemento de la lista?
- Espresso: espera que la actividad finalice la tarea de fondo después de presionarBack ()
- Configuración de gradiente y maven espresso para Android
- Prueba de desplazamiento sin fin RecyclerView con Espresso y RxJava
- ¿Las pruebas de selenio valen la pena en dispositivos móviles?
- Comprobación de ViewPager con Espresso. ¿Cómo funciona la acción a un botón de un elemento?
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:
-
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íneainstrumentTest.setRoot('src/test')
para que funcione de la misma manera con su configuración. -
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 } }
-
Añadí la biblioteca de robotium en Project Structure (
command-;
en mi mac) como una librería de maven. -
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); } }
-
Luego ejecuté la prueba a través de la línea de comandos
./gradlew connectedInstrumentTest
y funcionó para mí.
- Varias aplicaciones con una base de código compartida
- Lista de todos los nombres de calles y calles en Google en API