unitarias - El estudio de Android dice "Empty Test Suite" para AndroidTestCase
pruebas unitarias android studio (11)
Esta pregunta ya tiene una respuesta aquí:
Creé un caso de prueba de ejemplo que amplía AndroidTestCase. Cuando ejecuto el caso de prueba, se equivoca diciendo
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);
}
}
¿Has configurado tu testRunner en tu gradleConfig? Utilizamos diferentes TestRunners para diferentes pruebas (para acelerar las cosas. Mi configuración se ve así
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á "Suite de prueba vacía".
Como nadie más lo menciona: los métodos en AndroidTestCase
subclases de AndroidTestCase
deben ser public
y tener nombres que comiencen con "prueba".
El OP y las respuestas obtuvieron todo el derecho pero me lo perdí y obtuve el mismo error exacto.
Empecé a aprender sobre probar aplicaciones de Android y he estado luchando con el mismo problema. Debe proporcionar el 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);
}
}
Entiendo que esta pregunta es antigua, y las herramientas de desarrollo han cambiado significativamente desde que se hizo esta pregunta.
Sin embargo, tuve un problema similar (en AndroidStudio 2.1.1) y resultó que solo el mensaje de error 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 es 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 de logcat. Como resultado, no se ejecutó ningún método de prueba, y Android Studio escribe este error "vacío de conjunto de pruebas".
Es decir, "Empty test suite" puede significar lo que realmente dice (no tiene ningún método de prueba declarado, por ejemplo, porque olvidó anotarlos con @Test
), pero también puede significar que algo (como una excepción de tiempo de ejecución arrojada en su código de inicialización de la aplicación) impide que el examinador llegue a cualquier método de prueba (que parece ser su caso).
Compruebe adb-logcat y busque RuntimeException
s. Esto probablemente te encuentre la causa raíz de tu problema.
Esta guía podría ayudar - http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio
En el último gradle (0.9+), la prueba debe estar en androidTest dir
También en tu gradle.build:
dependencies {
androidTestCompile ''junit:junit:4.+''
}
también agregue ésos bajo defaultConfig {
testPackageName "test.java.foo"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
Mi problema era que tenía el constructor predeterminado generado por Android Studio, se veía así
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest(Class<NewsActivity> activityClass) {
super(activityClass);
}
}
y tuve que cambiarlo para eliminar el problema
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest() {
super(ActivityYouWantToTest.class);
}
}
Obtuve 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 el plugin de Gradle 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 )
Obtuve este error porque uno de mis métodos de prueba no incluía "throws exception" después de la firma del método. podría ayudar a alguien
Tengo el mismo problema. Estaba haciendo testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
en mi defaultConfig {...}
. Acabo de eliminar esa línea, y ahora está funcionando bien (el IDE está eligiendo la configuración correcta del corredor en el tiempo de compilación).
Espero que esto ayude a alguien.
Usamos 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.
AndroidTestCase
no requiere que sobrescriba el constructor predeterminado ya que no proporciona una Activity
particular como el Context
, sino que le proporciona una general para que pueda 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 que AndroidTestCase
sea aplicable, se necesitaría una prueba que requiera recursos:
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í usamos AndroidTestCase
porque necesitamos acceder a los recursos de la aplicación.
Ya tengo un constructor predeterminado en mi caso de prueba, pero todavía me daba el error "Empty test suite" y me quedé atrapado en "Instanciando pruebas ...".
Intenté crear un nuevo espacio de trabajo, reiniciando Android Studio, pero eso no funcionó.
Finalmente, cierre Android SDK y emulador.
Vaya a su android-sdks / plataforma-herramientas.
Borre 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
Correr:
./adb kill-server ./adb start-server
Inicie Android y ejecute el caso de prueba.