Robolectric的RuntimeEnvironment.application已经被弃用,ApplicationProvider.getApplicationContext()在哪里?

40

我从3.8换成了Robolectric 4.0 Beta 1,因为我需要与Android 9 (API 28)兼容。

这个变化导致RuntimeEnvironment.application已经被弃用。

替代方案似乎是使用:

androidx.test.core.app.ApplicationProvider.getApplicationContext()

我不知道这段代码的确切位置。它必须在一个完全独立的依赖项中。它在哪里?如何将其添加到我的项目中?

谢谢!

1个回答

69

如在Robolectric迁移指南4.0中所述,您需要将androidx测试核心依赖项testImplementation 'androidx.test:core:1.0.0'添加到您的build.gradle文件中。完成后,您可以使用ApplicationProvider.getApplicationContext()方法。


1
但是我无法在本地单元测试用例中访问它。我正在使用Robolectric库和RuntimeEnvironment.application。这表示它已被弃用,解决方案是使用ApplicationProvider.getApplicationContext()。但是,如何在标记为androidTestImplementation的库中访问它,因为这些库只能在androidTests(Instrumentation Test Cases)中访问。请指导。参考-https://developer.android.com/training/testing/set-up-project#android-test-dependencies - Namrata Bagerwal
在单元测试中使用Context实例是一种不好的做法。如果需要在单元测试中使用它们,请使用Mockito或Kotlin的Mockk进行模拟。也许您需要重构代码,以便在方法中将上下文(或在测试中模拟)作为参数传递。 - dudi

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