我的仪器测试用的

@RunWith(AndroidJUnit4.class)

from

import androidx.test.runner.AndroidJUnit4;

为了建立我的测试用例。现在这一行被标记为已弃用,提示使用AndroidJUnit4 from

import androidx.test.ext.junit.runners.AndroidJUnit4

然而,如果我试图从命名包中导入AndroidJUnit4,我得到了错误,该ext无法解决。

你有什么想法,应该在gradle中包含什么包来解决这个问题?


当前回答

在构建中包含这些行。Gradle应用程序模块。 testImplementation androidx.test.ext: junit: 1.1.1的 androidTestImplementation androidx.test.ext: junit: 1.1.1的 在测试类中,将测试运行程序替换为 进口androidx.test.ext.junit.runners.AndroidJUnit4; 如果InstrumentationRegistry. gettargetcontext()已弃用,请使用androidx.test.platform.app中的InstrumentationRegistry .getTargetContext InstrumentationRegistry.getInstrumentation () ()

其他回答

根据AndroidJUnit4的文档,

gradle文件应该包含以下行:

androidTestImplementation androidx.test.ext: junit: 1.1.1的

将测试类从AndroidJUnit4改为AndroidJUnit4ClassRunner

如果它仍然不工作,请确保您清理和/或重新构建项目。您还可以直接在谷歌的maven存储库中检查当前版本

如果您导入了那些AnroidX测试库,同步并重新构建了项目,但导入的包仍然无法解析。只要记住你如何升级你的项目到AndroidX,关闭Android Studio,删除。idea文件夹,重新打开你的项目…

这对我很管用!

在构建中包含这些行。Gradle应用程序模块。 testImplementation androidx.test.ext: junit: 1.1.1的 androidTestImplementation androidx.test.ext: junit: 1.1.1的 在测试类中,将测试运行程序替换为 进口androidx.test.ext.junit.runners.AndroidJUnit4; 如果InstrumentationRegistry. gettargetcontext()已弃用,请使用androidx.test.platform.app中的InstrumentationRegistry .getTargetContext InstrumentationRegistry.getInstrumentation () ()

对我来说,以下步骤是有效的: 1. 将androidx库替换为这里发布的。我的最终应用/构建。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类中的导入模块替换为最新的类:

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");
    }
}

让我感到困扰的是,instrumentationregistry类仍然被弃用。所以我使用了instrumentationregistry . getininstrumentation ().getTargetContext();从androidx.test.platform.app.InstrumentationRegistry类。

在我的案例中,将androidTestImplementation更改为testImplementation有帮助。 在阅读build.gradle中的testimplemimplementation和androidtestimplemimplementation之间的android差异之前,我不知道区别