test studio library dependency compile check androidtestcompile gradle android-studio android-espresso

gradle - library - Android Studio no reconoce las clases de espresso



espresso check (8)

Estoy ejecutando Android Studio 0.5.0 con Gradle 1.11 . Estoy intentando instalar la biblioteca Espresso desde com.jakewharton.espresso:espresso:1.1-r2 . Por alguna razón, AS no pudo reconocer las clases de Espresso después de la sincronización del proyecto. Así que cada vez que trato de importar import static com.google.android.apps.common.testing.ui.espresso.Espresso.onView; Dentro de los archivos de la carpeta de androidTest , lo marca como no válido.

Aquí está mi build.gradle:

apply plugin: ''android'' android { compileSdkVersion 19 buildToolsVersion ''19.0.2'' defaultConfig { minSdkVersion 14 targetSdkVersion 19 versionCode 1 versionName "1.0" testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt'' } } } dependencies { compile ''com.squareup.dagger:dagger-compiler:1.2.1'' compile ''com.squareup.dagger:dagger:1.2.1'' androidTestCompile (''com.jakewharton.espresso:espresso:1.1-r2'') { exclude group: ''com.squareup.dagger'' } }

Bibliotecas externas:


Espresso 2.0

Recientemente se lanzó Espresso 2.0 y ahora forma parte de la biblioteca de soporte de Android . Esto fue anunciado en el blog de desarrollo de Android .

Guia de preparacion

Con eso también enlazaron una guía de configuración actualizada . Allí puede encontrar instrucciones para configurar desde cero o para actualizar su configuración de espresso existente para 2.0.

Otros consejos

Los cambios son los 2 enlaces anteriores que contienen toda la información que necesita. Si no he enumerado algunos errores comunes a continuación

Actualiza Android Studio a 1.0. *

Comience por actualizar su compilación de Android Studio. Debería poder obtener al menos 1.0 de los canales de compilación estables (= predeterminado). Entonces solo use la opción de menú Android Studio > Buscar actualizaciones ....

Para obtener lo último de lo último, también puede ir a Preferencias, buscar actualizaciones y cambiar el canal al canal canario .

Actualizar la biblioteca de soporte de Android a v 11+

Se incluyó el espresso en la biblioteca de soporte desde la versión 11, por lo que debe obtener al menos esa versión. Compruebe las actualizaciones utilizando el administrador de Android SDK . La biblioteca de soporte se encuentra dentro del árbol de extras en la parte inferior.

Nuevas dependencias y espacio de nombres.

Si se está actualizando desde una versión anterior de espresso, tendrá que actualizar las dependencias y el espacio de nombres. Para proyectos nuevos, simplemente agréguelos a las dependencies en su archivo build.gradle .

dependencies { androidTestCompile ''com.android.support.test.espresso:espresso-core:2.0'' androidTestCompile ''com.android.support.test:testing-support-lib:0.1'' }

Y como el espacio de nombres ha cambiado, tendrás que actualizar todas las importaciones:

android.support.test.espresso

Tenga en cuenta que es más fácil usar importaciones estáticas. Algunas importaciones de uso común como ejemplo:

import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; import static android.support.test.espresso.matcher.ViewMatchers.withContentDescription;

Para las afirmaciones use hamcrest, nuevamente algunos ejemplos:

import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.anyOf; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.startsWith; import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.equalToIgnoringCase; import static org.hamcrest.Matchers.equalToIgnoringWhiteSpace;

Corredor de instrumentacion

El corredor de prueba debe configurarse tanto en el archivo build.gradle dentro de defaultConfig como en la configuración de ejecución utilizada para iniciar las pruebas desde Android Studio.

defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }

Y en su configuración de ejecución, use esto como corredor de instrumentación (solo el nombre completo de la clase):

android.support.test.runner.AndroidJUnitRunner

Ejemplo de caso de prueba

Y un caso de prueba de ejemplo para terminar. Tenga en cuenta que MainActivity es su actividad que desea probar. Las pruebas en sí mismas son métodos públicos que comienzan con pruebas, como testListGoesOverTheFold en el siguiente ejemplo.

@LargeTest public class HelloWorldEspressoTest extends ActivityInstrumentationTestCase2<MainActivity> { public HelloWorldEspressoTest() { super(MainActivity.class); } @Override public void setUp() throws Exception { super.setUp(); getActivity(); } public void testListGoesOverTheFold() { onView(withText("Hello world")).check(isDisplayed()); } }

Para obtener más información sobre las pruebas de escritura, visite la guía de inicio de espresso .


Android Studio 1.5.1 no realizó los onView() u onData() en mi caso. Acabo de hacer una importación estática de la clase Espresso y todos sus métodos.

Agregué la siguiente línea y todo funcionó perfectamente.

import static android.support.test.espresso.Espresso.*;


Así que esto es básicamente un error con Android Studio (supongo).

Referencia:

  1. Problema planteado en grupos adt-dev
  2. Error real - # 66841

Solución (hasta que se solucione el error):

Agregue una dependencia proporcionada duplicada en su archivo de gradle así:

dependencies { // ... provided ''com.jakewharton.espresso:espresso:1.1-r2'' androidTestCompile (''com.jakewharton.espresso:espresso:1.1-r2'') { exclude group: ''com.squareup.dagger'' } }


Este tema me estaba volviendo loco. Y parece que es un error conocido en Android Studio. En mi caso, se resolvió después de haber cambiado el Tipo de compilación de Liberar a Depurar para la aplicación principal. Espero que esto pueda ser de ayuda para alguien.


He intentado todas las soluciones que los muchachos adivinaron anteriormente y aún obtuve el error de clase no encontrada.

Descubrí mi solución, me salvó el día. Por lo tanto, si abre la pestaña del proyecto a la izquierda de las carpetas de su proyecto en Studio y verifica las variantes de compilación , puede ver que su proyecto está configurado para prueba de unidad . Debe restablecerlo en las pruebas de instrumentación de Android y asegurarse de que su archivo test.java esté bajo ** src / androidTest / java **


No es específico sobre el archivo de origen en el que está viendo el error, pero según mis pruebas, creo que está intentando acceder a las clases de Espresso desde una de sus principales clases de aplicaciones (dentro de src / main / java / ) . Si es así, eso no funcionará, porque ha incluido Espresso a través de una dependencia de androidTestCompile , lo que lo hace accesible solo a sus clases de prueba, que deben estar bajo src / androidTest / java .


Seis meses más tarde, esto sigue siendo un problema y el error al que hace referencia el respondedor original se ha vuelto a abrir: https://code.google.com/p/android/issues/detail?id=66841 y se le ha dado mayor prioridad. Todavía no he logrado que Android Studio reconozca las clases de Espresso y el uso del ámbito "proporcionado" para las dependencias no funcionó para solucionar el problema. (Usando AS 0.8.6 y Gradle 0.12.2)


de acuerdo con http://tools.android.com/tech-docs/new-build-system/user-guide solo se prueba un tipo de compilación, de forma predeterminada es el Tipo de compilación de depuración.

Así que compruebe que está utilizando la variante de compilación de depuración y reconstruya la aplicación. En otros tipos de compilación, todas sus dependencias de prueba de Android no serán visibles.

Si necesitas probar tu tipo de compilación actual, puedes hacer algo como esto:

android {... testBuildType "puesta en escena"}