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 ?

70voto

lmac Points 774

Vous devez fournir un 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);
    }
}

sur vos autres questions :

  1. Non. Mes tests s'exécutent toujours sans annotations, mais je pense que c'est une bonne pratique d'en avoir. Cela 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.

  2. Oui, vous avez besoin du préfixe "test". InteliJ donne un avertissement "méthode jamais utilisée" quand il n'y a pas de préfixe "test", et saute cette méthode pendant l'exécution du test.

  3. Oui. J'ai organisé mes tests en sous-paquets et cela semble bien fonctionner.

54voto

tir38 Points 387

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 "Android Tests". Parfois, ces configurations sont corrompues si je remanie la classe testée (par exemple en passant à un nouveau paquet).

enter image description here

9voto

user1587329 Points 91

Aucune de ces solutions ne m'a permis de résoudre le problème. Ce qui m'a aidé, c'est en suivant les instructions :

Créer une configuration de test

Dans Android Studio :

  • Ouvrir Menu Exécuter -> Modifier Configurations
  • Ajouter un nouveau Tests Android configuration
  • Choisissez un module
  • Ajouter un d'instrumentation spécifique :

    android.support.test.runner.AndroidJUnitRunner

Exécutez la configuration nouvellement créée.

7voto

Jeff Stapleton Points 183

J'ai eu un problème similaire. Je ne suis pas sûr de la raison pour laquelle cela se produit mais j'ai pu le résoudre en allant dans : "File" > "Invalidate Caches/Restart" dans Android Studio.

4voto

kotlinski Points 301

Je ne sais pas si cela peut aider pour Android Studio, mais j'avais une sorte de conflit Intellij-Gradle. Je l'ai résolu en faisant un "clic droit" sur le fichier de test et en cliquant sur "compiler le fichier ...Test.java". Après cela, je pouvais à nouveau exécuter des tests simples.

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