Android IllegalStateException d'Aucun instrument enregistré! Doit s'exécuter sous un enregistrement de l'instrumentation
J'ai du mal à faire ce test fonctionnel d'une machine à Expresso de travail sur Android. Mon Application est un Multdex application de sorte que je suis en suivant les instructions écrites sur ce lien comme suit : (https://developer.android.com/tools/building/multidex.html).
J'ai déjà configuré mon build.gradle comme ceci :
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
def AAVersion = '3.3.2'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
}
apt {
arguments {
androidManifestFile variant.outputs[0].processResources.manifestFile
resourcePackageName 'br.com.foo'
}
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "br.com.foo"
minSdkVersion 15
targetSdkVersion 21
android.enforceUniquePackageName = false
multiDexEnabled true
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
testApplicationId "br.com.foo.test"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
dexOptions {
preDexLibraries = false
javaMaxHeapSize "4g"
}
packagingOptions {
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
compile 'com.github.PhilJay:MPAndroidChart:v2.1.0'
compile 'com.github.daimajia:AndroidViewAnimations:v1.1.3'
compile 'com.makeramen:roundedimageview:2.1.1'
compile 'com.github.ACRA:acra:acra-4.6.2'
compile 'com.github.rahatarmanahmed:circularprogressview:2.3.2'
compile 'com.github.jhy:jsoup:jsoup-1.8.3'
compile project(':cacscore')
compile project(':croplib')
compile project(':zxingandroid')
compile project(':paho')
compile project(':urlImageViewHelper')
compile project(':facebookSDK')
compile project(':googleDateTimePickers')
compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.google.android.gms:play-services:7.8.0'
compile 'com.android.support:multidex:1.0.0'
compile 'org.apache.commons:commons-lang3:3.4'
compile files('libs/httpmime-4.1.jar')
compile files('libs/jackson-all-1.9.11.jar')
compile files('libs/jaxrs-api-2.2.1.GA.jar')
compile files('libs/spring-android-core-1.0.1.RELEASE.jar')
compile files('libs/spring-android-rest-template-1.0.1.RELEASE.jar')
compile 'com.melnykov:floatingactionbutton:1.2.0'
compile files('libs/trace.jar')
testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock-api-mockito:1.6.2'
testCompile 'org.powermock:powermock-module-junit4-rule-agent:1.6.2'
testCompile 'org.powermock:powermock-module-junit4-rule:1.6.2'
testCompile 'org.powermock:powermock-module-junit4:1.6.2'
androidTestCompile 'junit:junit:4.12'
// androidTestCompile('com.android.support.test:testing-support-lib:0.1') {
// exclude group: 'junit' //junit:junit-dep conflicts with junit:unit
// }
androidTestCompile 'com.android.support.test:runner:0.4'
//Set this dependency to use JUnit 4 rules
androidTestCompile 'com.android.support.test:rules:0.4'
//Set this dependency to build and run Espresso tests
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
//Set this dependency to build and run UI Automator tests
// androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
androidTestCompile('com.android.support:multidex-instrumentation:1.0.1') {
exclude group: 'com.android.support', module: 'multidex'
}
}
J'ai configuré le profil d'Exécution à partir de l'Android Studio réglage de la testInstrumentationRunner classe com.android.test.runner.MultiDexTestRunner.
Lorsque j'exécute la commande "adb shell pm liste instrumentation" j'ai cette sortie:
instrumentation:br.com.doe.test/com.android.test.runner.MultiDexTestRunner (target=br.com.doe)
instrumentation:br.com.foo.test/com.android.test.runner.MultiDexTestRunner (target=br.com.foo)
instrumentation:br.com.foo/com.android.test.runner.MultiDexTestRunner (target=br.com.foo)
Mais je recevoir cette sortie lorsque j'essaie d'exécuter mes tests:
Testing started at 17:23 ...
Installing br.com.foo
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/br.com.foo"
pkg: /data/local/tmp/br.com.foo
Success
Uploading file
local path: F:\Android\CACS\cacs\cacs\build\outputs\apk\cacs-debug-androidTest-unaligned.apk
remote path: /data/local/tmp/br.com.foo.test
Installing br.com.foo.test
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/br.com.foo.test"
pkg: /data/local/tmp/br.com.foo.test
Success
Running tests
Test running started
java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.
at android.support.test.InstrumentationRegistry.getInstrumentation(InstrumentationRegistry.java:45)
at br.com.bagger.inicio.MapaEnderecoTest.setUp(MapaEnderecoTest.java:35)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
Finish
Et c'est le seul test que je suis en train de lancer:
package br.com.doe.inicio;
import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.Espresso;
import android.support.test.espresso.action.ViewActions;
import android.support.test.espresso.matcher.ViewMatchers;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import br.com.foo.R;
@RunWith(AndroidJUnit4.class)
public class MapaEnderecoTest extends ActivityInstrumentationTestCase2<MapaEndereco>
{
private MapaEndereco mActivity;
public MapaEnderecoTest()
{
super(MapaEndereco.class);
}
@Override
@Before
protected void setUp() throws Exception
{
super.setUp();
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
mActivity = getActivity();
}
@Test
public void testeAbertura()
{
Espresso.onView(ViewMatchers.withId(R.id.map)).perform(ViewActions.click());
}
}
L'erreur se produit juste après le super.setUp() de l'appel, sur la méthode de configuration.
J'ai l'instrumentation enregistré dans le fichier AndroidManifest:
<instrumentation
android:label="Multdex"
android:name="com.android.test.runner.MultiDexTestRunner"
android:targetPackage="br.com.foo"
android:functionalTest="true"/>
Et le problème, je suis confronté n'est pas la même que celle décrite ici NullPointer Exception lors de l'utilisation de l'Espresso
quelle est la version de l'android plugin gradle utilisez-vous?
Je suis l'aide de ce plugin: classpath 'com.android.outils.construire:gradle:1.3.0' @RicardoBelchior
Malheureusement je n'ai pas encore résolus. J'ai pensé à déboguer le Android pour savoir ce qui se passe
OriginalL'auteur Igor Regis | 2015-10-05
Vous devez vous connecter pour publier un commentaire.
Le problème est avec ces gradle lignes:
Vous avez besoin d'un
MultiDexTestRunner
, mais cette classe est dérivée deInstrumentationTestRunner
. Votre code a besoin d'un lanceur de test qui est dérivée à partir deAndroidJUnitRunner
Une solution est de créer un personnalisé
TestRunner
qui s'étendAndroidJUnitRunner
et met en œuvre la MultiDex code:Vous avez seulement besoin d'ajouter un seul Gradle ligne qui fait référence à votre custom
testInstrumentationRunner
. Cela permettra d'assurer que le système de compilation génère leAndroidManifest.xml
propriétés qui sont nécessaires pour exécuter les tests avec ce coureur.Non, vous avez seulement besoin de l'personnalisé Lanceur. J'ai simplement déclaré dans mon construire.gradle. Lors de la construction, le fichier manifeste est généré dans
Application/build/intermediates/manifest/androidTest/debug/
avec la déclaration. Le Gradle ensemble d'outils qui s'en occupe.Il est inutile de créer un Lanceur personnalisé
Veuillez fournir un lien vers le même que le code et nous voyons où le
TestRunner
classe a été utilisé. @KenVanHoeylandtOriginalL'auteur Ken Van Hoeylandt
J'ai eu la même erreur et avait de la difficulté à beaucoup de choses à corriger. Bien que l'on a accepté de répondre contribué à l'OP, il ne résout pas mon cas, donc j'ai décidé que c'est bon si j'enregistre ma solution ici, j'espère que ça aidera quelqu'un d'autre aussi.
Mon problème était que j'étais mélange
AndroidJUnit4
,InstrumentationRegistry
,ApplicationProvider
etAndroidJUnitRunner
versions /packages. Assurez-vous qu'ils sont tous de la même génération. Ce sont les classes qui fait exécuter pour moi:androidx.test.runner.AndroidJUnitRunner
androidx.test.platform.app.InstrumentationRegistry
androidx.test.ext.junit.runners.AndroidJUnit4
androidx.test.core.app.ApplicationProvider
pour ces j'ai besoin de la suite dans les
dependencies
partie de mon build.gradleEt bien sûr la bonne
dans mon
defaultConfig
de labuild.gradle
OriginalL'auteur Boris Strandjev
Au lieu de:
J'ai dû utiliser une autre bibliothèque:
OriginalL'auteur David Kennedy