Android IllegalStateException Aucune instrumentation enregistrée! Doit courir sous une instrumentation d'enregistrement

Je suis en train de faire ce test fonctionnel avec Espresso sur Android. Mon application est une application Multdex, je suis donc conforme aux instructions écrites sur ce lien ( https://developer.android.com/tools/building/multidex.html ).

J'ai déjà configuré mon build.gradle comme ceci:

  • L'application d'Android Android en cours d'exécution sur Samsung Galaxy S3 se bloque au chargement du fichier
  • IllegalArgumentException: la valeur de liaison à l'index 1 est nulle
  • Point de pivotement de réglage Android pour l'animation à l'échelle
  • Les images JPEG ont des valeurs de pixels différentes sur plusieurs appareils
  • Android - Couper un cercle d'un carré Bitmap
  • Est-il possible d'obtenir le contexte de l'application dans un projet de bibliothèque Android?
  • 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 Exécuter à partir du Studio Android pour définir la classe testInstrumentationRunner à com.android.test.runner.MultiDexTestRunner.

    Lorsque j'exécute la commande " instrumentation de la liste pm pm shell ", 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 reçois toujours 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 test unique que j'essaie d'exécuter:

     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 l'appel super.setUp (), sur la méthode setUp.

    J'ai l'instrumentation enregistrée 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 auquel je suis confronté n'est pas le même que décrit ici NullPointer Exception lorsque vous utilisez Espresso

  • Comment réaliser une animation ondulée à l'aide de la bibliothèque de support?
  • Eclipse LogCat affiche uniquement la première lettre de chaque message
  • Validation de préférence Android EditText
  • L'utilisation de DiskLruCache dans Android 4.0 ne fournit pas la méthode openCache
  • Texte: utiliser le style de titre de la boîte de dialogue: @android: style / TextAppearance.DialogWindowTitle
  • Accéder aux variables par nom dans une boucle
  • One Solution collect form web for “Android IllegalStateException Aucune instrumentation enregistrée! Doit courir sous une instrumentation d'enregistrement”

    Le problème est avec ces lignes de gradle:

     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner" 

    Vous avez besoin d'un MultiDexTestRunner , mais cette classe est dérivée d' InstrumentationTestRunner . Votre code a besoin d'un coureur de test dérivé d' AndroidJUnitRunner

    Une solution consiste à créer un AndroidJUnitRunner personnalisé qui étend AndroidJUnitRunner et implémente le code MultiDex:

     import android.os.Bundle; import android.support.multidex.MultiDex; import android.support.test.runner.AndroidJUnitRunner; public class TestRunner extends AndroidJUnitRunner { @Override public void onCreate(Bundle arguments) { MultiDex.install(getTargetContext()); super.onCreate(arguments); } } 

    Il suffit d'ajouter une seule ligne Gradle qui fait référence à votre testInstrumentationRunner personnalisé. Cela garantira que le système de génération génère les propriétés AndroidManifest.xml qui sont nécessaires pour exécuter les tests avec ce coureur.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.