【问题标题】:Android. Where did ApplicationProvider go?安卓。 ApplicationProvider 去哪儿了?
【发布时间】:2019-06-13 00:01:03
【问题描述】:

我正在尝试运行这一行:

Context context = ApplicationProvider.getApplicationContext();

https://developer.android.com/training/data-storage/room/testing-db#java等示例代码推荐。

但是我不能导入 ApplicationProvider(我只是喜欢文档从不导入任何东西,假设你的编辑器会正确提示你......)。此行失败,出现“错误:包 androidx.test.core.app 不存在”:

import androidx.test.core.app.ApplicationProvider;

那么 ApplicationProvider 去哪儿了?我正在尝试使用当前上下文来创建 Room 数据库:

        Context context = ApplicationProvider.getApplicationContext();
        db = Room.inMemoryDatabaseBuilder(context, TestDatabase.class).build();
        userDao = db.getUserDao();

【问题讨论】:

标签: android android-testing


【解决方案1】:

将冗余行androidTestImplementation 'androidx.test:core:1.2.0' 添加到build.gradle

【讨论】:

  • 是的,这并不是多余的,您需要androidTestImplementation 而不是testImplementation
  • 但我无法在本地单元测试用例中访问它。我正在使用带有 RuntimeEnvironment.application 的 Robolectric 库。这表示它已被弃用,并且灵魂将使用 ApplicationProvider.getApplicationContext()。但是我如何访问它,因为标有 androidTestImplementation 的库只能在 androidTests(仪器测试用例)中访问。请指导。
  • 但是你不能在单元测试中使用任何 android,只能使用原始 Java,所以如果你需要一个应用程序上下文,你需要整个 Android 堆栈和 androidTests
  • 如果Android Room documentation 包含对这个导入和库的提及,那就太好了。尽管它是核心,但在我的 JUnit 5 测试中添加 Room 之前,我没有添加许多测试库。
【解决方案2】:

添加 androidTestImplementation 'androidx.test:core:$version'testImplementation 'androidx.test:core:$version' 依赖项取决于您对模块级 gradle 文件执行的测试类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 2014-03-15
    • 2015-07-17
    • 2012-10-30
    • 2013-05-23
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多