Quelqu'un a-t-il réussi à exécuter des tests dans Android Studio (à partir de l'interface graphique et non du terminal)? Je n'ai pas pu exécuter de tests à partir de l'interface graphique.
À chaque fois que j'essaie d'exécuter des tests via l'interface graphique, le message suivant s'affiche:
Je suis capable d'exécuter les tests depuis le terminal en utilisant la commande suivante:
./gradlew connectedAndroidTest
Je cours Android Studio 0.5.2 avec Gradle 1.11 avec Plugin 0.9.0 on Mac OSX
Ma structure de projet est la suivante.
MyProject/
src/
androidTest/
Java/
com.myproject.app.test/
… (tests source code) …
main/
Java/
com.myproject.app/
… (source code) …
res/
… (resources code) …
build.gradle
Mon fichier build.gradle ressemble à ce qui suit:
…
Android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
versionCode 12
versionName "2.0"
minSdkVersion 9
targetSdkVersion 19
testPackageName "com.test.foo"
testInstrumentationRunner "Android.test.InstrumentationTestRunner"
}
}
…
Si quelqu'un a des suggestions, je serai plus qu'heureux de les y trouver.
Ok, j'ai trouvé la cause de mon problème.
Dans le fichier misc.xml situé dans le dossier .idea de mon projet, la valeur d'attribut non valide pour le composant ProjectRootManager ressemblait à ce qui suit:
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.6 (3)" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
Donc, changer la valeur de l'attribut project-jdk-name en "1.6" _, a résolu le problème pour moi. Vous trouverez ci-dessous à quoi cela ressemblait après avoir mis à jour la valeur.
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
J'espère que cela aide quelqu'un.
Aujourd'hui, j'ai eu le même problème avec certains tests d'espresso et cela me rendait folle parce que tout semblait normal. Enfin, j'ai découvert que le problème était dû au fait que la méthode annotée avec @BeforeClass
(annotation utilisée pour marquer la méthode à exécuter avant toute méthode de test de la classe) lançait une exception. La raison pour laquelle cela m'a pris plus de temps que prévu était parce que si quelque chose ne va pas dans cette méthode, l'empilement de pile de l'exception ne s'affiche pas dans la fenêtre Journal de l'onglet Exécuter mais dans la fenêtre Journal de l'onglet Moniteur Android
Si vous voulez reproduire le problème, ajoutez ceci à votre classe de test:
@BeforeClass
public static void setupClass() {
throw new RuntimeException("Sorry dude, you won't find any test!");
}
Cela peut se produire lorsque le type de votre configuration d'exécution est incorrect.
Avec moi, cela se passe mal lors de l'exécution d'un test Espresso avec Kotlin: cela crée en quelque sorte un test Android JUnit qui est du type incorrect. La création manuelle d'un test instrumenté Android résout le problème.
Pour moi c'était une chose stupide. Le simple fait de passer de Release
variante de construction à Debug
a résolu le problème.
L'annotation @Test doit être annotée à partir de import org.junit.jupiter.api.Test;
Dans mon cas, USING KOTLIN , il n’a rien jeté. Si je lance dans le terminal la commande qu’il essayait de faire:
$ adb Shell am instrument -w -r -e debug false -e classe xx.xxxxxxx.xx.xx.xxx.xxx.HomeActivityTests xx.xxxxxxx.xx.xx.xxx.xxx.xxx.HomeActivityTests xx.xxxxxxx.xx.xx.xx.xxx.xxx.HomeActivityTests xx.xxxxxxx.xx.xx.xx.xxx.xxx.xxx.xxx.xxx.xxx.xxx.xx.
il y aura une erreur:
Causé par: org.mockito.exceptions.base.MockitoException:
Impossible de simuler/espionner la classe xx.xxxxxxx.xx.xx.xxx.xxx.xxx.ProductUseCase
Mockito ne peut pas se moquer de/espionner parce que: - classe finale À xx.xxxxxxx.xx.xx.rules.useCases.ProductUseCaseRule. (ProductUseCaseRule.kt: 36) À xx. xxxxxxx.xx.xx.xxx.xxx.HomeActivityTests. (HomeActivityTests.kt: 25) ... 20 autres
LES ÉCHECS!!!
et cela m'a montré que je n'avais pas open
ma classe, car c'est un doit en testant avec Kotlin