web-dev-qa-db-fra.com

Exécution d'un test unitaire spécifique avec gradle

Existe-t-il un moyen d'exécuter un test unitaire Android spécifique à l'aide de Gradle? J'ai essayé

gradle -Dtest.single=UnitTestName connectedInstrumentTest

mais il semble exécuter tous les tests du paquet.

Merci d'avance, Ivan.

36
Ivan Gromov

Le modèle est -D<testTaskName>.single=<TestClass> donc dans votre exemple, il devrait être:

gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest

REMARQUE: cette réponse est obsolète. Vous devez utiliser le commutateur --tests dans les dernières versions de Gradle. (voir d'autres réponses pour une explication)

21
erdi

Utiliser test.single semble être obsolète. La nouvelle manière correcte de faire ceci est

./gradlew :<module>:test --tests <pattern>

<pattern> pourrait être quelque chose comme:

  • com.example.MyTest pour exécuter toutes les méthodes de test dans com.example.MyTest
  • *MyTest pour faire correspondre toutes les méthodes de chaque classe dont le nom se termine par MyTest
  • *.MyTest.myMethod pour exécuter une méthode de test spécifique dans la classe MyTest dans n’importe quel package

Si vous avez une construction multi-projet, assurez-vous de donner le chemin du module avant la tâche test; sinon, vous recevrez un message d'erreur trompeur lorsqu'il recherchera votre motif de test dans chaque sous-projet.

Rien de tout cela n'est documenté sur le site de Gradle où je pourrais le trouver.

20
Chris Jones

Cela fonctionne si vous utilisez une instrumentationTestRunner:

./gradlew test -Pandroid.testInstrumentationRunnerArguments.class='<pkg>.YourClassName'

Utilisation de Gradle 2.10 et du plugin Android Gradle 2.0.0-beta2

12
jlhonora

Depuis le plugin Android Gradle 1.1.0-rc1, il est possible d’exécuter une seule classe de test à l’aide du drapeau --tests en exécutant:

./gradlew testDebug --tests=com.example.MyTest

Voir http://tools.Android.com/tech-docs/unit-testing-support#TOC-Running-from-Gradle

6
hidro

Tu dois vérifier ça. 

https://github.com/JCAndKSolutions/Android-unit-test

J'ai posé un problème dans ce dépôt github, et ce gars-là a résolu mon problème et l'a chargé sur maven. Dans mon fichier build.gradle, j'utilise ce plugin.

Les instructions sont écrites dans son référentiel. vous pouvez facilement le suivre. 

Après avoir utilisé ce plugin Android-unit-test, je peux utiliser comme

../gradlew -Dtest.single=SomeTest test 

ou

../gradlew -Dtest.single=SomeTest clean check

Maintenant cela fonctionne et je ne pouvais exécuter que les tests spécifiques que je veux

2
Wooseong Kim

N'oubliez pas de spécifier un nom de variante de construction après la déclaration de la propriété test comme ceci: 

-Dtest<buildVariantName>=<yourTestName>.

Comme si vous avez un type de construction debug qui vous donne la variante debug après la compilation, si vous voulez exécuter un test uniquement pour cette variante de construction, vous devez déclarer une commande comme celle-ci:

./gradlew -DtestDebug=UnitTestName testDebug

0
Alex Bonel

la commande Gradle ne fonctionne pas pour moi. J'ai utilisé ci-dessous mentioened adb command . Pour cela, vous devez d'abord créer votre apk.

shell adb est un instrument -w -r -e package -e debug false .debug.test/Android.support.test.runner.AndroidJUnitRunner

0
Tarkik

La réponse d'Erdi n'a pas fonctionné pour moi mais j'ai un seul parent pour tous mes cours de test, ce qui m'a permis de faire cela:

public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
    //...
    @Override
    protected void runTest() throws Throwable {
        if(getClass().getSimpleName().equals("MyTestClassName")) {
            super.runTest();
        }
    }
    //...
}

Ceci n’exécute que MyTestClassName. Nous pouvons l’étendre davantage pour n’exécuter que des méthodes de test spécifiques:

public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
    //...
    @Override
    protected void runTest() throws Throwable {
        if("MyTestClassName".equals(getClass().getSimpleName()) 
           && "testMethodName".equals(getName())) {
            super.runTest();
        }
    }
    //...
}
0
Denis Kniazhev