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

ka3ak Points 493

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 fonctionne sans aucun problème, je l'ai renommé pendant le processus de copie (pas de Refactor->Rename après la copie !) et j'y ai collé le contenu de mon test unitaire. Après cela, l'erreur a disparu.

0voto

Will P Points 349

J'ai rencontré l'erreur "Empty test suite" lorsque j'ai essayé d'exécuter des tests unitaires locaux dans mon projet Android Studio 3.0.

Après avoir lu le document Android Developer documentation Je me suis rapidement rendu compte que le problème était dû à ma configuration 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 exécuteur de test JUnit qui vous permet d'exécuter des classes de test de style JUnit 3 ou JUnit 4 sur Dispositifs Android .

Étant donné que mes tests étaient locaux et qu'il n'était donc pas nécessaire de les exécuter sur un appareil, la suppression des entrées com.Android.support.test... ci-dessus m'a permis d'exécuter les tests unitaires.

0voto

Laurent Points 616

Je faisais quelques 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.

0voto

Mihir Points 46

Cela m'est arrivé lorsque j'ai marqué par erreur une variable de classe non fantaisie avec l'annotation @Mock J'ai supprimé l'annotation et les tests se sont déroulés avec succès. Cela s'est produit avec Junit 4.5 sur Android Studio.

0voto

xavierdominguez Points 29

Il ne s'agit pas d'une solution, mais d'une solution de rechange qui vous permettra de vous remettre rapidement sur les rails :

  1. Tout d'abord, trouvez un test qui fonctionne. J'étais en train d'écrire un nouveau test et j'ai eu l'erreur 'empty test suite'. J'ai lancé d'autres tests et ils fonctionnaient comme d'habitude.

  2. Copiez le fichier de test qui fonctionne. Exécutez-le pour vous assurer que cette copie fonctionne comme l'original.

  3. 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.

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