Android IllegalStateException Keine Instrumentierung registriert! Ausführen muss, die unter einer Anmeldung instrumentation
Ich bin kämpfen, um diese funktionelle test mit Espresso-arbeiten auf Android. Meine App ist ein Multdex app also ich bin nach den Anweisungen in diesem link wie folgt : (https://developer.android.com/tools/building/multidex.html).
Ich bereits konfiguriert haben meine bauen.gradle wie diese :
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'
}
}
Konfigurierte ich die Führen-Profil wird aus dem Android-Studio-Einstellung der testInstrumentationRunner classe com.android.test.runner.MultiDexTestRunner.
Wenn ich den Befehl ausführen "adb shell pm Liste instrumentation" ich habe diese Ausgabe:
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)
Aber trotzdem erhalte ich diese Ausgabe, wenn ich versuche, Sie zu führen meine 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
- Und das ist die einmalige Prüfung, die ich versuche zu laufen:
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());
}
}
Tritt der Fehler direkt nach dem super.setUp () - Aufruf, auf der setUp-Methode.
Habe ich die instrumentation eingetragen in werden dem AndroidManifest-Datei:
<instrumentation
android:label="Multdex"
android:name="com.android.test.runner.MultiDexTestRunner"
android:targetPackage="br.com.foo"
android:functionalTest="true"/>
Und das problem, das ich bin vor ist nicht das gleiche, wie hier beschrieben, NullPointer Exception bei der Verwendung von Espresso
- Ich bin vor dem gleichen problem. Haben Sie eine Lösung gefunden bisher?
- welche version des android-gradle-plugin benutzt du?
- Ich bin mit diesem plugin: classpath 'com.android.tools.bauen:gradle:1.3.0' @RicardoBelchior
- Leider habe ich noch nicht gelüftet. Ich habe nachgedacht über die Android-debug-um herauszufinden, was Los ist
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist das problem mit diesen gradle Linien:
Benötigen Sie eine
MultiDexTestRunner
, aber diese Klasse ist abgeleitet vonInstrumentationTestRunner
. Der code muss einen test-runner, abgeleitet vonAndroidJUnitRunner
Ist eine Lösung zum erstellen einer benutzerdefinierten
TestRunner
erweitertAndroidJUnitRunner
und implementiert das MultiDex-code:Müssen Sie nur fügen Sie eine einzelne Gradle Zeile, die auf Ihre benutzerdefinierte
testInstrumentationRunner
. Dadurch wird sichergestellt, dass das build-system erzeugt dieAndroidManifest.xml
Eigenschaften, die erforderlich sind, um die tests auszuführen, die mit diesem Läufer.Application/build/intermediates/manifest/androidTest/debug/
mit der Erklärung in es. Die Gradle-toolset übernimmt.TestRunner
Klasse verwendet wurde. @KenVanHoeylandtIch hatte ähnliche Fehler und kämpfte viel, um es zu beheben. Obwohl die akzeptierte Antwort geholfen hat die OP, es nicht lösen mein Fall, also beschloss ich, es ist gut, wenn ich aufnehme meine Lösung hier, hoffentlich wird es helfen, jemand anderes zu.
Mein problem war, dass ich mischen
AndroidJUnit4
,InstrumentationRegistry
,ApplicationProvider
undAndroidJUnitRunner
Versionen /Pakete. Stellen Sie sicher, Sie alle sind von der gleichen generation. Dies sind die Klassen, die es alle gemacht haben, führen Sie für mich:androidx.test.runner.AndroidJUnitRunner
androidx.test.platform.app.InstrumentationRegistry
androidx.test.ext.junit.runners.AndroidJUnit4
androidx.test.core.app.ApplicationProvider
für diese brauchte ich die folgenden in der
dependencies
Teil meines bauen.gradleUnd natürlich die richtige
in meinem
defaultConfig
desbuild.gradle
Statt:
Hatte ich die Verwendung einer anderen Bibliothek: