Je frappe ma tête contre le mur ici pour essayer de comprendre pourquoi IntelliJ/Android rapporte "Suite de test vide". J'ai un petit projet avec deux modules IntelliJ ("Projets" dans Eclipse). Le module de test unitaire a son propre fichier AndroidManifest.xml, que j'ai collé en bas. J'essaie de lancer un ActivityUnitTestCase
, car les tests dépendront de l'objet Context
-.
Le nom du paquet du module principal est nilzor.myapp
. Le nom pacakge du module de test est nilzor.myapp.tests
Pourquoi le testeur ne détecte-t-il pas la méthode testBlah()
- en tant que test?
<?xml version="1.0" encoding="utf-8"?>
<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="nilzor.myapp.tests"
Android:versionCode="1"
Android:versionName="1.0">
<!-- We add an application tag here just so that we can indicate that
this package needs to link against the Android.test library,
which is needed when building test cases. -->
<application>
<uses-library Android:name="Android.test.runner"/>
</application>
<!--
This declares that this application uses the instrumentation test runner targeting
the package of nilzor.myapp. To run the tests use the command:
"adb Shell am instrument -w nilzor.myapp.tests/Android.test.InstrumentationTestRunner"
-->
<instrumentation Android:name="Android.test.InstrumentationTestRunner"
Android:targetPackage="nilzor.myapp"
Android:label="Tests for nilzor.myapp"/>
</manifest>
Et voici ma classe de test :;
package nilzor.myapp.tests;
public class NilzorSomeTest<T extends Activity> extends ActivityUnitTestCase<T>{
public NilzorSomeTest(Class<T> activityClass){
super(activityClass);
}
@SmallTest
public void testBlah(){
assertEquals(1,1);
}
}
J'ai lu le principes de base du test , le document de test d'activité , et j'ai essayé de le suivre Bonjour le blog de test du monde , même si c'est pour Eclipse. Je n'arrive pas à faire en sorte que le testeur trouve et exécute mon test. Qu'est-ce que je fais mal?
Certaines des questions qui me préoccupent encore sont les suivantes:
nilzor.myapp.tests
?Mais la principale question de ce message est pourquoi le testeur ne détecte-t-il pas mon test ?
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);
}
}
à propos de vos autres questions:
Non. Mes tests sont toujours effectués sans annotations, mais je suppose que c'est une bonne pratique de les avoir. Il vous permet de spécifier la taille des tests à exécuter. Voir Quel est le but des annotations @SmallTest, @MediumTest et @LargeTest dans Android? pour plus de détails.
Oui, vous avez besoin du préfixe "test". InteliJ donne un avertissement "méthode jamais utilisée" lorsqu'il n'y a pas de préfixe "test" et ignore cette méthode pendant l'exécution du test.
Oui. J'ai mes tests organisés en sous-paquets et cela semble bien fonctionner.
Si cela se produit "tout d'un coup" ou "cela fonctionnait il y a 5 minutes", ma solution était d'aller dans les configurations Run/Debug et de supprimer toutes les configurations sous "Tests Android". Parfois, ces configurations sont corrompues si je refacture la classe en cours de test (par exemple en passant à un nouveau package).
Aucune de ces réponses ne l'a corrigé pour moi. Ce qui a aidé était en suivant les instructions :
Créer une configuration de test
Dans Android Studio:
- Ouvrir Menu Exécuter -> Modifier les configurations
- Ajouter une nouvelle configuration Tests Android
- Choisissez un module
- Ajouter un coureur d'instrumentation spécifique:
Android.support.test.runner.AndroidJUnitRunnerExécutez la configuration nouvellement créée.
J'ai eu un problème similaire. Je ne sais pas pourquoi cela se produit, mais j’ai pu résoudre le problème en allant à: "Fichier"> "Invalider les caches/redémarrer" dans Android Studio.
J'ai eu le même problème sur Android Studio 2.3.1, il s’avérait qu’il s’agissait simplement d’un bogue avec AS. Exécuter le même test sur la version 2.2.1 se passe bien.
Si vous utilisez uniquement Android Studio sur le canal Cannary, je vous recommande également d'installer une version stable également. http://tools.Android.com/tips/using -multiple-Android-studio-versions
Je ne sais pas si cela aide pour Android Studio, mais j'ai eu une sorte de conflit Intellij-Gradle. Résolu en "faisant un clic droit" sur le fichier de test et en tapant "fichier de compilation" ... Test.Java ". Après cela, je pouvais exécuter à nouveau des tests simples.
Pour Intellij 15, j'ai résolu ce problème en:
De toute évidence, vous avez besoin d'un périphérique cible pour pouvoir exécuter vos tests car ils sont des tests instrumentés. Pour certaines raisons, Android studio parfois ne vous demande pas de pointer sur cet appareil cible et envoyez simplement le message "Empty Test Suite". Il existe différentes façons de corriger voici quelques-uns:
lancez votre application principale et sélectionnez un appareil cible ou
accédez à la configuration Exécuter (Exécuter/Exécuter .../Modifier les configurations) et modifiez l'option Options de la cible de déploiement.
J'ai eu des tests qui fonctionnaient bien jusqu'à ce que gradle
et Android studio soient mis à niveau.
Outre l'ajout d'un constructeur par défaut à vos tests, vous devrez peut-être effectuer certaines de ces tâches pour que votre suite de tests fonctionne.
Sous src/
créer androidTest/Java/<your-package-name>/test
. Notez le androidTest
. Tout le reste, y compris instrumentTest
ne fonctionnera pas.
Ajoutez ceci à build.gradle
sourceSets {
testLocal {
Java.srcDir file('src/androidTest/Java')
resources.srcDir file('src/androidTest/resources')
}
}
Android{
sourceSets {
instrumentTest.setRoot('src/androidTest/')
}
}
dependencies{
testLocalCompile 'junit:junit:4.11'
}
task localTest(type: Test, dependsOn: assemble) {
testClassesDir = sourceSets.testLocal.output.classesDir
Android.sourceSets.main.Java.srcDirs.each { dir ->
def buildDir = dir.getAbsolutePath().split('/')
buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/')
sourceSets.testLocal.compileClasspath += files(buildDir)
sourceSets.testLocal.runtimeClasspath += files(buildDir)
}
classpath = sourceSets.testLocal.runtimeClasspath
}
check.dependsOn localTest
Ajoutez ceci au AndroidManifest.xml
<instrumentation
Android:name="Android.test.InstrumentationTestRunner"
Android:label="Tests for my packaged app"
Android:targetPackage="<my-package-name>.test" />
Dans mon cas, aucune des réponses précédentes n'a fonctionné. La solution était simplement déplacez la classe de test dans un autre paquet.
Cela s'est passé sous androidTest/
J'ai eu ce problème parce que je l'avais dans mon build.gradle:
testOptions {
execution "Android_TEST_ORCHESTRATOR"
}
Même si je n'utilisais pas le Android Test Orchestrator (vous devez avoir copié les didacticiels par erreur).
Commenter cela a résolu le problème pour moi.
Dans mon cas, ce problème était dû à une erreur dans mon code, il s'agissait en fait d'une classe d'application. L'activité cible n'était donc pas ouverte et les impressions de sortie de test
Erreur de la suite de tests vide
J'ai essayé d'exécuter des tests directement depuis le terminal avec adb Shell am instrument -w -r -e package your.package -e debug false Android.support.test.runner.AndroidJUnitRunner
. Avec cela, il imprime pour vous beaucoup plus d’exception.
Je viens de renommer le fichier et le problème a été résolu.
Aucune des autres solutions ne fonctionnait pour moi, mais j'ai pu le faire en désinstallant simplement l'application ou la suite de tests existante, puis en exécutant les tests.
Dans mon cas, le projet sur lequel je travaillais comportait quelques modules. Aucune des solutions que j'ai trouvées pour cette erreur ne m’a aidé, puis j’ai réalisé que si j’ajoutais les dépendances de test dans les DEUX des fichiers build.gradle, les tests commençaient comme par magie. Peu importe si vos tests ne résident que dans l'un des modules, les deux fichiers de gradation doivent inclure les dépendances et la valeur testInstrumentationRunner.
Donc, si comme moi, aucune des autres réponses ne vous a aidé, essayez d'ajouter ces lignes au fichier build.gradle de chacun de vos modules:
Android {
....
defaultConfig {
...
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
}
et ensuite ajouter aussi:
dependencies {
...
// Test
androidTestCompile 'com.Android.support:support-annotations:23.4.0'
androidTestCompile 'com.Android.support.test:runner:0.5'
androidTestCompile 'com.Android.support.test:rules:0.5'
}
Mon problème a été causé par une exception lancée dans le @BeforeClass
méthode de mon cas de test. Cela ne causait en aucun cas l'échec du test - je l'ai trouvé uniquement en inspectant la sortie logcat.
J'ai corrigé l'exception et soudain mes tests ont été lancés!
J'ai eu le même problème, et la raison était que ma classe de test n'avait pas Test à la fin du nom de la classe!
Après avoir fait face au problème aujourd'hui - ne pas être en mesure d'exécuter l'instrumenté Android tests avec une erreur de suite vide - j'ai trouvé un problème git concernant ce problème et, grâce à Stephan Linzner, j'ai pu exécuter les tests.
tl; dr Vous devez cliquer avec le bouton droit de la souris sur le package de test et non sur la classe pour que les tests soient exécutés.
Référence: https://github.com/googlecodelabs/Android-testing/issues/27#issuecomment-21907486
Dans mon cas, j’avais mes tests instrumentés à androidTest/Java/<package.name>/MyTestingClass
, mais j'avais défini ma variante de construction actuelle sur "pré-production". Et voilà le but! Comme spécifié dans documentation d'Android Studio :
Par défaut, tous les tests sont exécutés avec le type de construction de débogage.
Le message Class not found. Empty test suite.
a continué à apparaître jusqu'à ce que je fasse ceci:
Ajoutez cette ligne à mon build.gradle :
Android{
[...]
testBuildType "preproduction"
}
Ensuite, j'ai refait les tests et cette fois, ils fonctionnent parfaitement!
Pas une solution, mais une solution de contournement qui vous remettra sur les rails rapidement:
Tout d'abord, trouvez un test qui fonctionne. J'écrivais un nouveau test dans lequel j'avais l'erreur "suite de tests vide". J'ai fait d'autres tests et ils travaillaient comme d'habitude.
Copiez le fichier de test qui fonctionne. Exécutez-le pour vous assurer que cette copie fonctionne comme l'original.
Retirez le corps et remplacez-le par votre nouveau code de test.
Le test devrait maintenant fonctionner.
Nous avons passé environ deux heures à essayer de trouver la cause, mais en vain.
Dans Android studio avec spock framework, j'ai changé la version de mon diplôme de 2.2.2 à 3.2.1 et tout va bien.
Cet article m'a aidé: suite de tests vide
Fondamentalement, je devais créer un paquet - instrumentTest/Java - sous mon répertoire src et y placer tous les tests. Ensuite, je pourrais exécuter ces tests individuellement.
J'ai eu le bloc de code suivant
@get:Rule
lateinit var activityScenario: ActivityScenario<HomeActivity>
parce que je devais passer différents paramètres dans l'intention d'activité basée sur les différents cas de test. Quand j'ai enlevé le @get:Rule
les tests ont recommencé à fonctionner.
Je faisais des insertions dans une base de données dans la méthode @BeforeClass. J'ai réalisé que j'avais un problème de mappage objet/base de données. Ce problème de mappage de données était la cause de ce problème pour moi.
Voici les étapes de débogage que je suis en train de suivre lorsque Android Studio décide tout à coup de cesser de lancer des tests de débogage (et c'est ce qui se passe souvent de manière embarrassante !!):
Je vais ajouter plus de correctifs au fur et à mesure que je les rencontre!
J'avais un projet brut Java) dans lequel cela se produisait. Simplement Java + JUnit4. Il réside définitivement dans quelque chose dans vos fichiers .idea/ou .iml. I mien mis au rebut, ré-importé, et finalement les tests ont été à nouveau exécutés.
J'ai rencontré l'erreur "Suite de test vide" lors de la tentative d'exécution de tests unitaires locaux dans mon projet Android Studio 3.0.
Après avoir lu le Android Developer documentation , ==, je me suis vite rendu compte que le problème était dû à ma configuration de gradle, qui comprenait les lignes suivantes.
testImplementation 'com.Android.support.test:runner:0.5'
testImplementation 'com.Android.support.test:rules:0.5'
La classe AndroidJUnitRunner est un programme d'exécution de test JUnit qui vous permet d'exécuter des classes de test de type JUnit 3- ou JUnit 4 sur des appareils Android .
Étant donné que mes tests étaient locaux et ne devaient donc être exécutés sur aucun périphérique, la suppression des entrées com.Android.support.test ... ci-dessus me permettait d'exécuter les tests unitaires.
Je n'ai rien fait et le problème a disparu après une demi-journée de souffrance. J'ai ouvert et fermé plusieurs fois les projets, exécuté manuellement chaque test de cours, ce qui a peut-être été corrigé.
La classe de test peut être exclue de la compilation. Corrigez-le dans setting-compiler-exclude.
La réponse acceptée n'a pas résolu mon problème. J'ai donc décidé de copier ExampleInstrumentedTest
qui est créé par défaut dans Android Studio et s'exécute sans aucun problème, l'a renommé pendant le processus de copie (pas de Refactor> Renommer après la copie!) et y ai collé le contenu de mon test unitaire, après quoi l'erreur a disparu.
Cela m'est arrivé lorsque j'ai marqué par erreur une variable de classe non fictive avec l'annotation @Mock
Suppression de l'annotation et exécution des tests. Ceci est arrivé avec Junit 4.5 sur Android Studio