Android studio dice "Empty Test Suite" para AndroidTestCase

He creado un caso de prueba de ejemplo que extiende AndroidTestCase. Cuando ejecuto el caso de prueba, se equivoca al decir

Running tests Test running startedTest running failed: Instrumentation run failed due to 'java.lang.RuntimeException' Empty test suite. 

El caso de prueba

 import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; import static org.junit.Assert.assertEquals; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import java.lang.Exception; import java.lang.Override; public class DateFormatTest extends AndroidTestCase{ @Override protected void setUp() throws Exception { super.setUp(); } @Override protected void tearDown() throws Exception { super.tearDown(); } public DateFormatTest(){ super(DateFormatTest.class); } @SmallTest public void testMultiply() { assertEquals("10 x 5 must be 50", 50, 10*5); } } 

Tengo este error al ejecutar pruebas desde Android Studio. Resultó que había colocado mis casos de prueba en la carpeta incorrecta. Al ejecutar Gradle / Android Studio, todas las pruebas de Android deben estar en la carpeta src/instrumentTest/java .

Editar: En Gradle plugin versión 0.9 o posterior el nombre correcto de la carpeta es androidTest . ( http://tools.android.com/tech-docs/new-build-system/migrating_to_09 )

Puesto que nadie más lo menciona: los métodos en AndroidTestCase subclases de AndroidTestCase necesitan ser public y tienen nombres que comienzan con "prueba"!

El OP y las respuestas todo esto bien, pero me perdí y obtuvo el mismo error.

Tengo este error porque uno de mis métodos de prueba no incluye "lanza excepción" después de la firma del método. Podría ayudar a alguien

Entiendo que esta pregunta es vieja, y las herramientas de desarrollo han cambiado significativamente desde que se ha hecho esta pregunta.

Sin embargo, tuve un problema similar (en AndroidStudio 2.1.1) y resultó que era sólo el mensaje de error que era bastante engañoso. Para mí, dijo:

 Test running started Test running failed: Instrumentation run failed due to 'java.lang.IllegalStateException' Empty test suite. 

(Nota: La diferencia con la pregunta original está en IllegalStateException vs. RuntimeException)

Resultó que esta IllegalStateException realmente se lanzó en la inicialización del contexto de la aplicación como se puede ver al inspeccionar la salida logcat. Como resultado, no se ejecutaron los métodos de prueba, y Android Studio escribe este error "Empty test suite", un poco equivocado.

Es decir, "Empty test suite" puede significar lo que realmente dice (no se han declarado los métodos de prueba, por ejemplo, porque se olvidó anotarlos con @Test ), pero también puede significar que algo (como una excepción de tiempo de ejecución Código de inicialización de la aplicación) impide que el test-runner alcance cualquier método de prueba (que parece ser su caso).

Compruebe adb-logcat y busque RuntimeException s. Esto probablemente le encontrará la causa raíz de su problema.

Mi problema era que tenía el constructor por defecto generado por el estudio de Android, se veía así

 public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{ public SomeTest(Class<NewsActivity> activityClass) { super(activityClass); } } 

Y tuve que cambiarlo a esto para deshacerme del problema

 public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{ public SomeTest() { super(ActivityYouWantToTest.class); } } 

Tengo el mismo problema. Yo estaba teniendo testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" en mi defaultConfig {...} . Acabo de quitar esa línea, y ahora está trabajando muy bien (El IDE está escogiendo el config derecho del corredor en tiempo de la estructura).

Espero que esto ayude a alguien.

Utilizamos la clase AndroidTestCase para definir que estamos probando componentes que son específicos de Android. El principal beneficio de AndroidTestCase es que nos da acceso a los recursos de la aplicación, como cadenas y diseños, etc.

El AndroidTestCase no requiere sobrescribir el constructor predeterminado, ya que no proporciona una Activity particular como Context , sino que proporciona una información general para que puedas llamar a getContext() .

En su ejemplo, no está utilizando ningún componente de Android, por lo que para usted, lo siguiente tendría sentido:

 import android.test.suitebuilder.annotation.SmallTest; import junit.framework.TestCase; public class DateFormatTest2 extends TestCase { @SmallTest public void testMultiply() { assertEquals("10 x 5 must be 50", 50, 10 * 5); } } 

Observe el uso de TestCase lugar de AndroidTestCase .

Para AndroidTestCase ser aplicable, una prueba que requiere recursos sería necesaria:

 import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; public class DateFormatTest extends AndroidTestCase { @SmallTest public void testAppTitle() { assertEquals("MyApp", getContext().getResources().getString(R.string.app_name)); } } 

Aquí utilizamos AndroidTestCase porque necesitamos acceder a los recursos de la aplicación.

Esta guía puede ayudar – http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio

En el último gradle (0.9+) la prueba debe estar bajo androidTest dir

También en su gradle.build:

 dependencies { androidTestCompile 'junit:junit:4.+' } 

También agrega aquellos bajo defaultConfig {

 testPackageName "test.java.foo" testInstrumentationRunner "android.test.InstrumentationTestRunner" 

}

¿Configuró su testRunner en su gradleConfig? Utilizamos diferentes TestRunners para diferentes pruebas (para acelerar las cosas.

 android { // Some stuff defaultConfig { // Some other stuff //junit test testInstrumentationRunner "de.qabel.qabelbox.QblJUnitRunner" //ui tests testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 

Si desactivo una de estas líneas, la prueba correspondiente también informará "Empty Test Suite".

Acabo de empezar a aprender sobre las pruebas de las aplicaciones de Android y he estado luchando con el mismo problema. Debe proporcionar un constructor predeterminado para su clase de prueba, por ejemplo:

 package nilzor.myapp.tests; public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{ public NilzorSomeTest(){ super(ActivityYouWantToTest.class); } @SmallTest public void testBlah(){ assertEquals(1,1); } } 

Ya tengo un constructor por defecto en mi caso de prueba, pero todavía me estaba dando error "Empty test suite" y estaba atascado en "Instantiating tests …".

Intenté crear un nuevo espacio de trabajo, restableciendo Android Studio, pero eso no funcionó.

Finalmente, cierre el SDK de Android y el emulador.

  1. Ve a tu android-sdks / platform-tools.

  2. Borrar todos los archivos temporales de Android con estos comandos:

    a. rm -rf ~/Library/Application Support/AndroidStudio

    segundo. rm -rf ~/Library/Caches/AndroidStudio

    do. rm -rf ~/Library/Application Support/AndroidStudio

    re. rm -rf ~/Library/Preferences/AndroidStudio

  3. Correr:

     ./adb kill-server ./adb start-server 
  4. Inicie Android y ejecute el caso de prueba.

  • Ejecutar pruebas de JUnit en la aplicación de Gradle para Android
  • ¿Cómo compartir recursos entre la prueba de unidad y la prueba de instrumentación en android?
  • Excepción en el subproceso "main" java.lang.NoClassDefFoundError: junit / textui / ResultPrinter
  • Cuenta de simulacro en ActivityInstrumentationTestCase2
  • Robolectric InflateException al usar el diseño de barra de acción personalizada
  • Prueba de unidad de Android con ActivityInstrumentationTestCase2, getActivity () se bloquea cuando el caso de prueba anterior provoca que se inicie otra actividad
  • Cómo probar Menú
  • Cómo automatizar las pruebas de actualización para android
  • Prueba de unidad Actividad.startService () llamada?
  • Cómo ejecutar grupos de pruebas de unidad con gradle en Android
  • Android Studio Espresso Prueba de error: Empty Test Suite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.