AndroidJUnit4.class 已弃用:如何使用 androidx.test.ext.junit.runners.AndroidJUnit4?
AndroidJUnit4.class is deprecated: How to use androidx.test.ext.junit.runners.AndroidJUnit4?
对于我的仪器测试,我使用
@RunWith(AndroidJUnit4.class)
来自
import androidx.test.runner.AndroidJUnit4;
为了建立我的测试用例。现在这一行被标记为已弃用,并提示使用 AndroidJUnit4
from
import androidx.test.ext.junit.runners.AndroidJUnit4
但是,如果我尝试从命名包中导入 AndroidJUnit4
,我会收到错误消息,无法解析 ext
。
你有什么想法,应该在 gradle 中包含什么包来解决这个问题?
根据the documentation for AndroidJUnit4,
- gradle 文件应包含以下行:
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
- 将测试 class 从
AndroidJUnit4
更改为 AndroidJUnit4ClassRunner
如果它仍然不起作用,请确保清理 and/or 重建您的项目。您也可以直接在 Google's maven repository
中查看当前版本
在我的案例中,将 androidTestImplementation
更改为 testImplementation
有所帮助。
在阅读这篇文章之前我不知道其中的区别
如果您尝试了@MarcelGangwisch 的解决方案,但您的构建失败并提示找不到资源,并且您还 cleaned/rebuilt 您的项目,但它仍然无法运行,请尝试以下操作:
(也基于@KrzysztofDziuba 的解决方案)
在您更改依赖关系的 gradle 文件中,确保将其添加为您需要的类型,即:
对于 UI 个测试:
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
对于单元测试:
testImplementation 'androidx.test.ext:junit:1.1.0'
在我的实例中,我同时添加了它,现在它可以工作了。
我尝试了上面给出的所有方法,直到我去了官方 Android 站点,他们建议从 androidx.test.ext.junit.runners.AndroidJUnit4
而不是 androidx.test.runner.AndroidJUnit4
导入。 link
对我来说,以下步骤有效:
1. 将 androidx 库替换为 here 发布的库。我的最终 app/build.gradle
看起来像这样:
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'
}
然后我手动将 ExampleInstrumentTest.java
class 中的导入模块替换为最新的 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");
}
}
困扰我的是 InstrumentationRegistery
class 仍然被弃用的事实。所以我使用了 InstrumentationRegistry.getInstrumentation().getTargetContext();
来自 androidx.test.platform.app.InstrumentationRegistry
class.
如果您导入了那些AnroidX测试库,同步并重新构建了项目,但是导入的包仍然没有解析。请记住您如何将项目升级到 AndroidX,关闭 Android Studio 并删除 .idea
文件夹并再次重新打开您的项目...
这对我有用!
解决方案
将此行添加到 build.gradle:androidTestImplementation 'androidx.test.ext:junit:1.1.1'
在测试中将AndroidJUnit4
改为AndroidJUnit4ClassRunner
class
警告
我遇到了同样的错误,但以下解决方案对我来说失败了:
文件 -> 使缓存无效...,select 无效并重新启动
在 build.gradle 应用程序模块中包含这些行。
测试实施'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
在测试中class将你的测试运行器替换为
导入androidx.test.ext.junit.runners.AndroidJUnit4;
如果 InstrumentationRegistry.getTargetContext()
已弃用,请像这样使用 androidx.test.platform.app
中的 InstrumentationRegistry
InstrumentationRegistry.getInstrumentation().getTargetContext()
对于我的仪器测试,我使用
@RunWith(AndroidJUnit4.class)
来自
import androidx.test.runner.AndroidJUnit4;
为了建立我的测试用例。现在这一行被标记为已弃用,并提示使用 AndroidJUnit4
from
import androidx.test.ext.junit.runners.AndroidJUnit4
但是,如果我尝试从命名包中导入 AndroidJUnit4
,我会收到错误消息,无法解析 ext
。
你有什么想法,应该在 gradle 中包含什么包来解决这个问题?
根据the documentation for AndroidJUnit4,
- gradle 文件应包含以下行:
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
- 将测试 class 从
AndroidJUnit4
更改为
AndroidJUnit4ClassRunner
如果它仍然不起作用,请确保清理 and/or 重建您的项目。您也可以直接在 Google's maven repository
中查看当前版本在我的案例中,将 androidTestImplementation
更改为 testImplementation
有所帮助。
在阅读这篇文章之前我不知道其中的区别
如果您尝试了@MarcelGangwisch 的解决方案,但您的构建失败并提示找不到资源,并且您还 cleaned/rebuilt 您的项目,但它仍然无法运行,请尝试以下操作: (也基于@KrzysztofDziuba 的解决方案)
在您更改依赖关系的 gradle 文件中,确保将其添加为您需要的类型,即:
对于 UI 个测试:
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
对于单元测试:
testImplementation 'androidx.test.ext:junit:1.1.0'
在我的实例中,我同时添加了它,现在它可以工作了。
我尝试了上面给出的所有方法,直到我去了官方 Android 站点,他们建议从 androidx.test.ext.junit.runners.AndroidJUnit4
而不是 androidx.test.runner.AndroidJUnit4
导入。 link
对我来说,以下步骤有效:
1. 将 androidx 库替换为 here 发布的库。我的最终 app/build.gradle
看起来像这样:
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'
}
然后我手动将 ExampleInstrumentTest.java
class 中的导入模块替换为最新的 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");
}
}
困扰我的是 InstrumentationRegistery
class 仍然被弃用的事实。所以我使用了 InstrumentationRegistry.getInstrumentation().getTargetContext();
来自 androidx.test.platform.app.InstrumentationRegistry
class.
如果您导入了那些AnroidX测试库,同步并重新构建了项目,但是导入的包仍然没有解析。请记住您如何将项目升级到 AndroidX,关闭 Android Studio 并删除 .idea
文件夹并再次重新打开您的项目...
这对我有用!
解决方案
将此行添加到 build.gradle:
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
在测试中将
AndroidJUnit4
改为AndroidJUnit4ClassRunner
class
警告
我遇到了同样的错误,但以下解决方案对我来说失败了:
文件 -> 使缓存无效...,select 无效并重新启动
在 build.gradle 应用程序模块中包含这些行。
测试实施'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.ext:junit:1.1.1'
在测试中class将你的测试运行器替换为
导入androidx.test.ext.junit.runners.AndroidJUnit4;
如果
InstrumentationRegistry.getTargetContext()
已弃用,请像这样使用androidx.test.platform.app
中的InstrumentationRegistry
InstrumentationRegistry.getInstrumentation().getTargetContext()