J'ai créé un exemple de scénario de test qui étend AndroidTestCase. Lorsque je lance le scénario de test,
Running tests
Test running startedTest running failed:
Instrumentation run failed due to 'Java.lang.RuntimeException'
Empty test suite.
Le cas test
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);
}
}
Comme personne ne le mentionne, les méthodes des sous-classes AndroidTestCase
doivent être public
et avoir des noms commençant par "test"!
Le PO et les réponses ont tous bien compris, mais je l’ai raté et j’ai eu exactement la même erreur.
J'ai eu cette erreur lors de l'exécution de tests à partir d'Android Studio. Il s'est avéré que j'avais placé mes cas de test dans le mauvais dossier. Lors de l'exécution de Gradle/Android Studio, tous les tests Android doivent figurer dans le dossier src/instrumentTest/Java
.
Edit: Dans Gradle plugin version 0.9 ou ultérieure, le nom correct du dossier est androidTest
. ( http://tools.Android.com/tech-docs/new-build-system/migrating_to_09 )
Je comprends que cette question est ancienne et que les outils de développement ont considérablement changé depuis que cette question a été posée.
Cependant, j'avais un problème similaire (dans AndroidStudio 2.1.1) et il s'est avéré que le message d'erreur était tout à fait trompeur. Pour moi, il a dit:
Test running started
Test running failed: Instrumentation run failed due to 'Java.lang.IllegalStateException'
Empty test suite.
(Remarque: la différence par rapport à la question initiale réside dans IllegalStateException et RuntimeException.)
Il s'est avéré que cette IllegalStateException
avait été lancée lors de l'initialisation du contexte de l'application, comme le montre l'inspection de la sortie logcat. En conséquence, aucune méthode de test n'a été exécutée et Android Studio écrit cette erreur "Suite de test vide" quelque peu trompeuse.
C'est à dire. "Suite de test vide" peut signifier ce qu'il dit réellement (aucune méthode de test n'a été déclarée, par exemple parce que vous avez oublié de l'annoter avec @Test
), mais cela peut également signifier qu'un événement (comme une exception d'exécution levée lors de l'initialisation de votre application code) empêche le testeur d’atteindre les méthodes de test (ce qui semble être votre cas).
Vérifiez adb-logcat et recherchez RuntimeException
s. Cela vous permettra probablement de trouver la cause fondamentale de votre problème.
J'ai eu cette erreur parce que l'une de mes méthodes de test n'incluait pas "lève exception" après la signature de la méthode. pourrait aider quelqu'un
J'ai le même problème. J'avais testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
dans mon defaultConfig {...}
. Je viens de supprimer cette ligne, et maintenant cela fonctionne correctement (IDE sélectionne la configuration de runner appropriée lors de la compilation).
J'espère que cela aidera quelqu'un.
Mon problème était que j'avais le constructeur par défaut généré par le studio Android, ressemblait à ceci
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest(Class<NewsActivity> activityClass) {
super(activityClass);
}
}
et je devais le changer pour se débarrasser du problème
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest() {
super(ActivityYouWantToTest.class);
}
}
Nous utilisons la classe AndroidTestCase
pour définir que nous testons des composants spécifiques à Android. Le principal avantage de AndroidTestCase
est qu’il nous donne accès aux ressources de l’application, telles que les chaînes et les mises en page, etc.
AndroidTestCase
ne vous oblige pas à écraser le constructeur par défaut car il ne fournit pas une Activity
particulière en tant que Context
, mais vous en fournit plutôt un général afin que vous puissiez toujours appeler getContext()
.
Dans votre exemple, vous n'utilisez aucun composant Android. Par conséquent, les éléments suivants auraient du sens:
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);
}
}
Notez l'utilisation de TestCase
plutôt que AndroidTestCase
.
Pour que AndroidTestCase
soit applicable, un test nécessitant des ressources serait nécessaire:
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));
}
}
Ici, nous utilisons la variable AndroidTestCase
car nous devons accéder aux ressources de l'application.
Avez-vous configuré votre testRunner dans votre gradleConfig? Nous utilisons différents TestRunners pour différents tests (pour accélérer les choses. Ma configuration ressemble à ceci
Android {
// Some stuff
defaultConfig {
// Some other stuff
//junit test
testInstrumentationRunner "de.qabel.qabelbox.QblJUnitRunner"
//ui tests
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
}
Si je désactive une de ces lignes, le test correspondant signalera également "Suite de test vide".
Je viens tout juste d’apprendre à tester des applications Android et j’ai eu le même problème. Vous devez fournir le constructeur par défaut pour votre classe de test, par exemple:
package nilzor.myapp.tests;
public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public NilzorSomeTest(){
super(ActivityYouWantToTest.class);
}
@SmallTest
public void testBlah(){
assertEquals(1,1);
}
}
J'ai déjà un constructeur par défaut dans mon cas de test, mais il me donnait toujours l'erreur "Suite de test vide" et j'étais bloqué dans "Instanciation des tests ...".
J'ai essayé de créer un nouvel espace de travail, de réinitialiser Android Studio, mais cela n'a pas fonctionné.
Enfin, fermez SDK et émulateur Android.
Allez sur votre Android-sdks/platform-tools.
Effacer tous les fichiers temporaires Android avec ces commandes:
une. rm -rf ~/Library/Application Support/AndroidStudio
b. rm -rf ~/Library/Caches/AndroidStudio
c. rm -rf ~/Library/Application Support/AndroidStudio
ré. rm -rf ~/Library/Preferences/AndroidStudio
Courir:
./adb kill-server
./adb start-server
Démarrez Android et exécutez le scénario de test.