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.
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)
Utiliser test.single
semble être obsolète. La nouvelle manière correcte de faire ceci est
./gradlew :<module>:test --tests <pattern>
où <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 packageSi 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.
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
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
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
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
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
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();
}
}
//...
}