Mise en contexte dans AndroidTestCase ou InstrumentationTestCase dans la fonctionnalité de test unitaire d'Android Studio
J'ai eu certains de mes anciens tests en cours d'exécution avec Android Studio 1.1.0 de la nouvelle unité de test de fonctionnalité de prise en charge.
Lors de l'exécution de gradlew testDebug les tests sont exécutés, mais tous les tests qui nécessitent un Contexte échouer parce que getContext
(AndroidTestCase) /getInstrumentation.getContext()
(InstrumentationTestCase) les deux renvoie la valeur null.
Comment puis-je résoudre ce problème?
Voici deux variantes que j'ai essayé:
import android.content.Context;
import android.test.InstrumentationTestCase;
public class TestTest extends InstrumentationTestCase {
Context context;
public void setUp() throws Exception {
super.setUp();
context = getInstrumentation().getContext();
assertNotNull(context);
}
public void testSomething() {
assertEquals(false, true);
}
}
et
import android.content.Context;
import android.test.AndroidTestCase;
public class TestTest extends AndroidTestCase {
Context context;
public void setUp() throws Exception {
super.setUp();
context = getContext();
assertNotNull(context);
}
public void testSomething() {
assertEquals(false, true);
}
}
C'est mon module de build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.0"
testOptions {
unitTests.returnDefaultValues = true
}
defaultConfig {
applicationId "com.example.test.penistest"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
testCompile 'junit:junit:4.12'
}
et ici le build.gradle
pour le projet:
//Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.3'
//NOTE: Do not place your application dependencies here; they belong
//in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
EDIT: Mes tests tous travaillé avant la mise à niveau à la version 1.1.0 et a couru sur un périphérique ou un émulateur.
EDIT:
Voici 2 captures d'écran de défaut InstrumentationTestCase et AndroidTestCase:
source d'informationauteur asco
Vous devez vous connecter pour publier un commentaire.
Mise à jour - s'il vous Plaît utiliser Espresso pour l'écriture de l'instrumentation des essais
Plus Récents Exemples:
J'ai eu ces de travail sans déployer à un périphérique. Mettre le tests dans le
/src/main/test/
dossier.Ici sont les plus récents exemples, j'ai pris des exemples et testé dans mon propre test temporaire du projet. J'ai couru les tests via la ligne de commande:
./gradlew clean test
. Veuillez en lire plus ici: https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support.Haut
build.gradle
:Application
build.gradle
:Des Tests De Base:
InstrumentationTestCaseTest
pour testerContext
etAssertions
.ActivityTestCase
pour tester votreResources
.AndroidTestCase
pour testerContext
etAssertions
.Googler Exemples Anciens:
Après Googler beaucoup combat cette erreur, je crois que votre pari est d'utiliser
getInstrumentation().getContext().getResources().openRawResource(R.raw.your_res).
ou quelque chose de similaire afin de tester vos ressources.À L'Aide De InstrumentationTestCase:
De Ressources De Test:
Source: https://stackoverflow.com/a/8870318/950427 et https://stackoverflow.com/a/16763196/950427
À L'Aide De ActivityTestCase:
De Ressources De Test:
Source: https://stackoverflow.com/a/9820390/950427
À L'Aide De AndroidTestCase:
Obtenir le
Context
(un simple hack):Source: https://stackoverflow.com/a/14232913/950427
Mais, si vous regardez un le code source de
AndroidTestCase
il semble que vous devez définir unContext
vous-même:Source: http://alvinalexander.com/java/jwarehouse/android/core/java/android/test/AndroidTestCase.java.shtml
Avec le Android Tests Bibliothèque De Prise En Chargevous pouvez
InstrumentationRegistry.getContext()
InstrumentationRegistry.getTargetContext()
InstrumentationRegistry.getInstrumentation()
Voir le bas de la page pour savoir comment ajouter des Tests bibliothèque de prise en charge de votre projet.
Ici est une nouvelle façon de configuration (à l'unité) instrumentation tests
Installation
Dans votre construire.gradle ajouter:
et les dépendances suivantes:
Exemple de classe
Exemple de test
Documentation
J'ai été un message d'erreur lorsque vous essayez de faire des appels à SQLite en utilisant @taynguyen réponse, donc au lieu de:
InstrumentationRegistry.getContext()
J'ai utilisé:
InstrumentationRegistry.getTargetContext()
Afin d'obtenir mon objectif de contexte de l'application au lieu de l'Instrumentation contexte.
Context
doit se référer à quelque chose qui s'étendContext
comme unActivity
ouApplication
classe.Une autre alternative est d'utiliser
Robolectric.Application
.