java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation

no instrumentation registered mockito
delegate runner 'org.robolectric.robolectrictestrunner' for androidjunit4 could not be loaded.
robolectric androidx
android unit test context
android studio run all instrumentation tests
unit test android library
unit testing android studio
android mockcontext not found

I have been trying to perform a simple UI test using Espresso and all my tests fail with the same exception:

java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation

It's a beginners guide in the use of esspresso here. I have already found similar questions but the most relevant ones to me are unanswered here - I presume it is because they didn't paint the whole picture so here is my code. I will only show one test because they all fail with the exact same error:

build.gradle(Module: app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "io.github.vinge1718.myrestaurants"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        //testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }
}

dependencies {
    testImplementation "org.robolectric:robolectric:3.8"
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
    androidTestImplementation 'androidx.test:runner:1.1.0'
    androidTestImplementation 'androidx.test:rules:1.1.0'
    androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
}

build.gradle (Project: MyRestaurant)

buildscript {

    repositories {
        google()
        jcenter()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

correction here are the two tests. I don't think the error is in any way related to the tests themselves but the configurations - I stand corrected though

(MainActivityInstrumentationTest.java)

package io.github.vinge1718.myrestaurants;

import android.support.test.runner.AndroidJUnit4;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import androidx.test.rule.ActivityTestRule;

import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;


@RunWith(AndroidJUnit4.class)
public class MainActivityInstrumentationTest {
    private String mStringToBetyped;

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);

    @Before
    public void initValidString() {
        // Specify a valid string.
        mStringToBetyped = "Portland";
    }

    @Test
    public void validateEditText(){
        onView(withId(R.id.locationEditText))
                .perform(typeText(mStringToBetyped), closeSoftKeyboard())
                .check(matches(withText(mStringToBetyped)));
    }

    @Test
    public void locationIsSentToRestaurantActivity(){
        String location = "Portland";
        onView(withId(R.id.locationEditText)).perform(typeText(location));
        onView(withId(R.id.findRestaurantsButton)).perform(click());
        onView(withId(R.id.locationTextView)).check(matches(withText("Here are all the Restaurants near " + location)));
    }
}

I have tried following this espresso set up documentation here but I keep getting the same error:

Started running tests

java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation. at androidx.test.InstrumentationRegistry.getInstrumentation(InstrumentationRegistry.java:50) at androidx.test.InstrumentationRegistry.getTargetContext(InstrumentationRegistry.java:101) at androidx.test.rule.ActivityTestRule.(ActivityTestRule.java:144) at androidx.test.rule.ActivityTestRule.(ActivityTestRule.java:120) at androidx.test.rule.ActivityTestRule.(ActivityTestRule.java:103) at io.github.vinge1718.myrestaurants.MainActivityInstrumentationTest.(MainActivityInstrumentationTest.java:25) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:334) at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217) at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at android.support.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:101) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:27) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at org.junit.runner.JUnitCore.run(JUnitCore.java:115) at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:384) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2075)

Tests ran to completion.

Here is my test configurations as decribed in the espresso set up documentation:

enter image description here

I think this is because of libraries androidx is conflicting with com.android.support.test. If you want to use jetpack, you must convert all of test library to androidx, if you don't want that way, just delete your androidx libraries and use all com.android.support.test. Check my latest answer in Android Instrumentation Testing: No instrumentation registered Error. Hope this help you.

java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation. All attempts were made on a new  Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information. Learn more java.lang.IllegalStateException: No instrumentation registered!

I had the same issue and there difference between a test which exercise methods in classes, those standard unit tests go in app/src/test/java/<package>. UI tests that interact with buttons, edit texts, etc require expresso and go in app/src/androidTest/java/<package>. It took me several reads of the documentation and I wasted a day before I figured out the distinction.

|____app
  |
  | ____src 
  |   |____androidTest
  |   |  |____java
  |   |     |____<package>
  |   |        |____ MainActivityInstrumentationTest.java  # expresso here 
  |   |____test
  |      |____java
  |         |____<package>
  |            |____ MainActivityInstrumentationTest.java  # not here

assertNotEquals(dateFromTrueTime, normalDate) } catch (e: InterruptedException) { } } } } Everytime I run it, it gives me: java.lang.​IllegalStateException: No  java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation. (No instrumentation registered! Must run under a

What worked for me is to completely change back from

androidX

to

com.android.support

libraries in the build.gradle

Please note: You might have to re import the libraries in your class e.g.

import androidx.test.runner.AndroidJUnitRunner;

to

import android.support.test.runner.AndroidJUnitRunner;

Also make sure you always clean and rebuilt the project after each addition or removal library from build.gradle.

java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation. at androidx.test.platform.app. Home » Android » Android IllegalStateException No instrumentation registered! Must run under a registering instrumentation Must run under a registering instrumentation Posted by: admin May 10, 2020 Leave a comment

The exception "java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation." is thrown. AndroidX  Example custom test runner crashes #86. Closed java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.

java.lang.IllegalStateExceptionNo instrumentation registered! Must run under a registering instrumentation. This crash was crawled from quabr.com 4 years ago​  Must run under a registering instrumentation. java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.

tests Test running started java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation. at android.support.test. Dismiss Join GitHub today. GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

Comments
  • someone answered and resolved mine issue stackoverflow.com/a/53341010/10096288
  • My project is set up exactly like you have described. I think android studio 3.2.1 does that automatically. My UI tests path looks like: [app - src - androidTest - java - package.name - tests.java]