le grade ressemble à:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.google.developer.taskmaker"
minSdkVersion 19
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-annotations:25.2.0'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:25.2.0'
compile 'com.Android.support:recyclerview-v7:25.2.0'
compile 'com.Android.support:design:25.2.0'
compile 'com.Android.support:preference-v7:25.2.0'
debugCompile 'im.dino:dbinspector:3.4.1@aar'
// Android JUnit Runner
compile 'com.google.Android.gms:play-services-appindexing:8.4.0'
// Android runner and rules support
// add this for intent mocking support
androidTestCompile 'com.Android.support.test.espresso:espresso-intents:2.2.2'
// add this for webview testing support
androidTestCompile 'com.Android.support.test.espresso:espresso-web:2.2.2'
compile 'com.Android.support.test:runner:0.5'
compile 'com.Android.support.test:rules:0.5'
compile 'com.Android.support.test.espresso:espresso-core:2.2.2'
}
Le cas de test unitaire ressemble à
@RunWith(AndroidJUnit4.class)
public class TestClass {
@Rule
public ActivityTestRule<MainActivity> mActivityRule =
new ActivityTestRule<>(MainActivity.class);
@Test
public void buttonClick(){
onView(withId(R.id.fab)).perform(click()).check(matches(isDisplayed()));
}
}
Le message d'erreur ressemble à:
Java.lang.Exception: Custom runner class AndroidJUnit4 should have a public constructor with signature AndroidJUnit4(Class testClass)
at org.junit.runners.model.InitializationError.<init>(InitializationError.Java:38)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.Java:111)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.Java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.Java:101)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.Java:87)
at com.intellij.junit4.JUnit46ClassesRequestBuilder.collectWrappedRunners(JUnit46ClassesRequestBuilder.Java:90)
at com.intellij.junit4.JUnit46ClassesRequestBuilder.getClassesRequest(JUnit46ClassesRequestBuilder.Java:51)
at com.intellij.junit4.JUnit4TestRunnerUtil.buildRequest(JUnit4TestRunnerUtil.Java:91)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.Java:95)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.Java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.Java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.Java:74)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.Java:144)
Process finished with exit code -1
J'ai déjà vérifié d'autres réponses mais je n'ai pas trouvé de solution.Veuillez dire où les choses se passent mal. Lors de l'exécution de ce code, j'obtiens une erreur
Cette erreur peut être répliquée en créant une nouvelle application avec le modèle par défaut dans Android Studio et en copiant la ExampleInstrumentedTest
générée automatiquement du dossier androidTest
dans le dossier test
:
Voici à quoi ressemble l'erreur:
Notez que pour répliquer le problème, vous devez également ajouter de manière incorrecte des dépendances au build.gradle
au niveau du module:
Les tests unitaires locaux et les tests instrumentés ont différentes configurations d'exécution. Si vous cliquez sur Editer les configurations comme ci-dessous:
Vous devriez voir vos tests instrumentés sous Android Instrumented Tests
et vos tests unitaires locaux sous le Android JUnit
comme dans les illustrations ci-dessous:
Pour les tests instrumentés Android, la configuration devrait ressembler à ce qui suit:
Pour Android JUnit:
Lorsque vous exécutez un test, Android Studio crée une configuration d'exécution pour vous. Si la configuration d'exécution est dans la mauvaise catégorie, vérifiez que vos dossiers test
et androidTest
sont corrects, puis vous pouvez supprimer la configuration d'exécution du Edit configurations
et relancer le test. Si vous avez configuré correctement, Android Studio utilisera le type de configuration d’exécution correct cette fois-ci.
Il existe deux types de tests sous Android:
Les tests instrumentés sont des tests conçus pour s'exécuter sur un combine ou émulateur. Ce sont des tests pour lesquels vous devez accéder à une partie entièrement fonctionnelle de la bibliothèque Android (comme un vrai Context
par exemple). Ceux-ci doivent être placés dans le dossier androidTest
et les dépendances pour ces tests (par exemple, Espresso, com.Android.support.test.rules:0.5
) seront précédées de androidTestCompile
dans votre build.gradle
.
Voici un exemple de test instrumenté:
import Android.content.Context;
import Android.support.test.InstrumentationRegistry;
import Android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
/**
* Instrumentation test, which will execute on an Android device.
*
* @see <a href="http://d.Android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.gyaltsab.myapplication", appContext.getPackageName());
}
}
Les tests unitaires locaux sont des tests que vous pouvez exécuter dans votre IDE. Ils ne dépendent normalement pas d’une partie de la bibliothèque Android non disponible sur une machine virtuelle standard (par exemple, ils ne dépendent pas de Context
). Les dépendances pour celles-ci vont dans la partie testCompile
de votre build.gradle
.
Voici un exemple de test unitaire:
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (Host).
*
* @see <a href="http://d.Android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
Notez que les tests d'unités locales n'ont pas besoin de l'annotation @RunWith(AndroidJUnit4.class)
dans la déclaration de classe. Veuillez consulter la documentation officielle pour une explication plus complète.
J'ai eu le même problème. Je travaille dans le studio Android 2.3.1. J'ai vérifié mes configurations d'exécution. Sous Exécuter -> Modifier les configurations, j'ai découvert que le test que j'essayais d'exécuter en tant que test instrumenté se trouvait dans la catégorie des tests Android JUnit, même si je l'avais dans le répertoire androidTest de mon projet. J'ai ajouté un test instrumenté Android (appuyez sur le bouton plus dans le coin) et je l'ai configuré pour pointer sur le test que j'essayais de réaliser. Cela a réglé le problème pour moi.
Essayez de déplacer votre fichier de test dans le dossier androidTest.
Dans mon cas, le problème a été résolu en mettant la ligne ci-dessous:
@RunWith(AndroidJUnit4ClassRunner.class)
solution: - vous devez modifier le dossier de test de test en androidTest et modifier la configuration de test (ou déplacer le fichier de test de test en androidTest modifier la configuration de test)
J'ai trouvé la solution dans cette vidéo: https://youtu.be/TGU0B4qRlHY?t=9m36s