Android. 应用程序提供者去哪了?

18

我试图运行这行代码:

Context context = ApplicationProvider.getApplicationContext();

例如https://developer.android.com/training/data-storage/room/testing-db#java中的示例代码建议这样做。

但是我无法导入ApplicationProvider(我喜欢文档从不导入任何内容,假设您的编辑器会正确提示您...)。 这行代码会失败,并显示“error: package androidx.test.core.app does not exist”:

import androidx.test.core.app.ApplicationProvider;

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

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

1
答案显然是在build.gradle中添加一个冗余行testImplementation 'androidx.test:core:1.2.0'。现在我正在处理https://dev59.com/8ek6XIcBkEYKwwoYEf0H的问题。 - Phlip
2个回答

29
build.gradle中添加一行冗余代码androidTestImplementation 'androidx.test:core:1.2.0'

不错的发现!https://developer.android.com/training/testing/unit-testing/local-unit-tests#setup - DaveNOTDavid
9
没错,这并不是多余的,你需要使用androidTestImplementation而不是testImplementation - MadeOfAir
但是我无法在本地单元测试用例中访问它。我使用的是带有RuntimeEnvironment.application的Robolectric库。它说这已被弃用,解决方案是使用ApplicationProvider.getApplicationContext()。但是,如何在标记为androidTestImplementation的库中访问它,这些库仅在androidTests(Instrumentation Test Cases)中可访问。请给予指导。 - Namrata Bagerwal
但是在单元测试中,您不能使用任何Android,只能使用原始的Java。因此,如果您需要一个应用程序上下文,则需要整个Android堆栈和androidTests。 - Phlip
1
如果Android Room文档中提到了这个导入和库,那就太好了。尽管它是核心库,但在添加Room到我的JUnit 5测试之前,我没有添加过许多测试库中的这个库。 - AdamHurwitz

5

根据您在模块级别的Gradle文件中所执行的测试类型,添加androidTestImplementation 'androidx.test:core:$version'testImplementation 'androidx.test:core:$version'依赖项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接