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 ?

2voto

Mateus Gondim Points 2305

Dans mon cas, aucune des réponses précédentes n'a fonctionné. La solution a été de simplement déplacer la classe de test dans un autre paquet .

Cela s'est passé sous androidTest/

2voto

Beloo Points 6231

Dans mon cas, ce problème a été causé par une erreur dans mon code, en fait c'était dans la classe d'application, donc l'activité cible n'a pas été ouverte et la sortie du test s'imprime.

Erreur de suite de test vide

J'ai essayé d'exécuter les tests directement à partir du terminal avec adb shell am instrument -w -r -e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner . Avec ceci il imprime pour vous beaucoup plus au sujet de l'exception.

1voto

Phil Points 11964

Aucune des autres solutions n'a fonctionné pour moi, mais j'ai pu obtenir ce résultat en désinstallant simplement l'application ou la suite de tests existante, puis en exécutant les tests.

1voto

Jorge Salas Points 141

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 je me suis rendu compte que si j'ajoutais les dépendances de test dans les DEUX fichiers build.gradle, les tests commençaient à fonctionner comme par magie. Peu importe si vos tests se trouvent dans un seul des modules, les deux fichiers gradle 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 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'

}

1voto

Lyn Points 101

J'ai juste renommé le fichier et le problème est résolu.

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