test studio example activity android gradle android-gradle robolectric android-testing

studio - Confundido sobre testCompile y androidTestCompile en Android Gradle



robolectric android studio (4)

//examen de la unidad

testCompile ''junit:junit:4.12''

El código anterior es una dependencia de JUnit 4 en el archivo build.gradle en el estudio de Android. Verá que tiene testCompile, porque JUnit se ejecuta en JVM y no requiere un dispositivo o emulador para ejecutarse. Eso también significa que las pruebas JUnit no requerirán que se ejecute el contexto de la aplicación y si lo requieren tendremos que "MOCK".

// Pruebas unitarias de instrumentos

androidTestCompile(''com.android.support.test:runner:0.5'', { exclude group: ''com.android.support'', module: ''support-annotations'' })

Ahora vemos androidTestCompile aquí, porque esta vez tenemos la intención de usar el dispositivo o el emulador para las pruebas, es decir, pruebas de instrumentación. Para una mejor aclaración, sugeriría leer de developer.android.com

Soy nuevo en el mundo de las pruebas y aún más en el mundo de las pruebas de Android. Al hacer una investigación sobre Robolectric que ayuda con las pruebas en Android, una cosa me confunde más. A veces en la web veo personas que usan la palabra clave testCompile en dependencias del script de compilación gradle cuando hacen referencia a Robolectric, mientras que otros usan androidTestCompile . Ciertamente, ambos no pueden ser válidos?

¿Alguien puede explicar la diferencia entre ambos y cuál de estos debería ser el que se usa al usar Robolectric?


Para agregar dependencia para pruebas JVM o pruebas unitarias (las pruebas que dependen solo del entorno de Java, no necesitamos ningún entorno de Android).

Utilizamos la directiva testCompile. Ejemplo:

dependencies { testCompile gradleTestKit() }

Para agregar la prueba de dependencia para instrumentación (las pruebas se basan principalmente en el entorno de Android), utilizamos la directiva androidTestCompile .


Para responder a su pregunta: use testCompile para robolectric

por qué, porque robolectric se ejecuta en la JVM burlándose de todo el comportamiento del dispositivo Android.

testCompile y androidTestCompile son carpetas de Android "por convención" que Gradle utiliza mientras ejecuta tareas proporcionadas por el complemento de Android.

androidTestDebug selecciona pruebas de la carpeta androidTest, testDebug selecciona pruebas de la carpeta de prueba,

De nuevo, estas son solo por carpetas de convenciones que puede proporcionar conjuntos de origen para estas configuraciones

Nota: el espresso es una biblioteca tan increíble que intenta alejarse de la robótica :)


Simplemente testCompile es la configuración para las pruebas unitarias (las ubicadas en src / test ) y androidTestCompile se usa para la API de prueba (que se encuentra en src / androidTest ). Como tiene la intención de escribir pruebas unitarias, debe usar testCompile .

Actualización: La distinción principal entre los dos es que el conjunto de fuentes de test ejecuta en una JVM Java normal, mientras que las pruebas de conjunto de androidTest AndroidTest se ejecutan en un dispositivo Android (o un emulador).