For my instrumentation tests I was using
@RunWith(AndroidJUnit4.class)
from
import androidx.test.runner.AndroidJUnit4;
For me the following steps worked:
1. Replace the androidx libraries with the one posted here . my final app/build.gradle
looked like this:
android {
...
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
...
}
dependencies {
...
testImplementation 'junit:junit:4.12'
// Core library
androidTestImplementation 'androidx.test:core:1.2.0'
// AndroidJUnitRunner and JUnit Rules
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
// Assertions
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.ext:truth:1.2.0'
androidTestImplementation 'com.google.truth:truth:0.42'
// Espresso dependencies
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
I then manually replaced the imported modules in my ExampleInstrumentTest.java
class with latest classes:
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4ClassRunner.class)
public class ExampleInstrumentedTest {
...
@Rule
public final ActivityTestRule<MainActivity> main = new ActivityTestRule<>(MainActivity.class, true);
@Before
public void init() {
...
}
@Test
public void listCount() {
...
}
@Test
public void useAppContext() {
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
Assert.assertEquals("in.curioustools.aad_x_testing2", appContext.getPackageName());
System.out.println("useAppContext : Test Ran");
}
}
The thing that was bugging me was the fact that InstrumentationRegistery
class was still deprecated. So i used InstrumentationRegistry.getInstrumentation().getTargetContext();
from androidx.test.platform.app.InstrumentationRegistry
class.
In my case changing androidTestImplementation
to testImplementation
helped.
I did't know the difference before reading this android difference between testImplementation and androidTestImplementation in build.gradle
I tried all given above until I went to the official Android site, and they suggested importing from androidx.test.ext.junit.runners.AndroidJUnit4
instead of androidx.test.runner.AndroidJUnit4
. link
If you imported those AnroidX test libraries, synced and re-built the project, but the imported packages were still not resolved. Just remember how you upgraded your project to AndroidX, close Android Studio and remove the .idea
folder and reopen your project again...
This worked for me !
According to the documentation for AndroidJUnit4,
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
AndroidJUnit4ClassRunner
from AndroidJUnit4
If it still doesn't work, make sure that you clean and/or rebuild your project. Also you can check the current version directly in Google's maven repository
Solution
Add this line in to build.gradle: androidTestImplementation 'androidx.test.ext:junit:1.1.1'
Change AndroidJUnit4
to AndroidJUnit4ClassRunner
in the test class
Warning
I got the same error, but the following solution failed for me:
File -> Invalidate Caches..., and select Invalidate and Restart