98 votes

Pourquoi le programme d'exécution des tests Android signale-t-il "Suite de tests vide" ?

Je me heurte à un mur en essayant de comprendre pourquoi IntelliJ/Android signale "Empty test suite". J'ai un petit projet avec deux modules IntelliJ ("Projects" dans Eclipse). Le module de test unitaire a son propre AndroidManifest.xml, que j'ai collé en bas. J'essaie d'exécuter un ActivityUnitTestCase puisque les tests dépendront de l Context -objet.

Le nom du paquet du module principal est nilzor.myapp . Le nom du paquet du module de test est le suivant nilzor.myapp.tests

Pourquoi le programme d'exécution des tests ne détecte-t-il pas le testBlah() -comme un 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 les fondamentaux des tests le document de test d'activité et j'ai essayé de suivre cette procédure Hello world test blog même si c'est pour Eclipse. Je n'arrive pas à faire en sorte que le test runner trouve et exécute mon test. Qu'est-ce que je fais de mal ?

Certaines des questions sur lesquelles j'ai encore des doutes sont les suivantes :

  1. Ai-je besoin d'une annotation au-dessus de la méthode de test unitaire ?
  2. Dois-je faire précéder la méthode de "test", ou est-ce seulement pour les tests JUnit ?
  3. Puis-je avoir des tests dans des sous-packages de nilzor.myapp.tests ?

Mais la question principale de ce billet est pourquoi le test runner ne détecte pas mon test ?

0voto

okwap Points 386

La classe de test peut être exclue de la compilation. Corrigez-la dans le paramètre-compiler-exclude.

0voto

gorbysbm Points 322

Voici les étapes de débogage que je suis en train de suivre lorsque Android Studio décide soudainement d'arrêter l'exécution / le débogage des tests (et cela arrive très souvent !!):

  • Construire : Reconstruire le projet
  • Redémarrer le dispositif : Redémarrez votre appareil/émulateur et réessayez.
  • Changement de périphérique : si vous avez à la fois un téléphone normal et un émulateur, débranchez-en un et essayez de le faire fonctionner avec un seul des périphériques.
  • Android Studio : Fichier--> Invalider les caches et redémarrer
  • Moniteur d'activité / Gestionnaire des tâches : triez les processus par nom, voyez s'il y a un processus sans nom qui utilise beaucoup de RAM, c'est un processus "fantôme" d'Android studio qui doit être tué.
  • git revert : essayez de cacher /reverser votre dernier code. Parfois, il y a une erreur de compilation qui échappe à Android Studio / gradle et il essaiera simplement d'exécuter un code non compilable.
  • Désinstallez puis réinstallez Android Studio.

J'ajouterai d'autres corrections au fur et à mesure que je les rencontrerai !

0voto

Gary Davies Points 143

Je n'ai rien fait et le problème a disparu après une demi-journée de souffrance, j'ai ouvert et fermé les projets plusieurs fois, j'ai exécuté les tests de chaque classe manuellement, peut-être que cela a réglé mon problème.

0voto

Dans mon cas, j'avais mes tests instrumentés dans androidTest/java/<package.name>/MyTestingClass mais j'avais réglé ma variante de construction actuelle sur "preproduction". Et c'est là que le bât blesse ! Comme spécifié dans Documentation Android Studio :

Par défaut, tous les tests sont exécutés avec le type de build debug.

Le message Class not found. Empty test suite. continuait à apparaître jusqu'à ce que je fasse ça :

  1. Ajoutez cette ligne à mon build.gradle :

    android{
        [...]
        testBuildType "preproduction"
    }
  2. Synchronisation de gradle.

  3. Supprimer mes configurations de test précédentes car elles ne prennent pas en compte cette synchronisation Gradle.

Ensuite, j'ai exécuté les tests à nouveau et cette fois-ci, ils fonctionnent parfaitement !!!

0voto

Psijic Points 317

Dans Android studio avec le framework spock, j'ai changé la version de mon gradle de 2.2.2 à 3.2.1 et tout va bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X