我们如何在Robolectric中访问应用程序的上下文?

use*_*968 104 robolectric

实际上,我需要获得API调用的响应Context.

Eug*_*nov 207

更新.

只需使用版本1.x和2.x:

Robolectric.application;
Run Code Online (Sandbox Code Playgroud)

对于版本3.x:

RuntimeEnvironment.application;
Run Code Online (Sandbox Code Playgroud)

  • 还要确保你不要在静态代码中使用`RuntimeEnvironment.application`(比如使用`@ BeforeClass`注释的方法),因为Robolectric可能不会在那时初始化,值将为'null`. (12认同)
  • 你为测试放了@RunWith(RobolectricTestRunner.class)吗? (11认同)
  • 是的..我添加了......但它仍然返回null (4认同)

rds*_*rds 26

您可以使用

RuntimeEnvironment.application
Run Code Online (Sandbox Code Playgroud)

  • 在RoboElectric 3.0中,Roboelectric.application不再存在,所以这可能是最好的答案 (4认同)

小智 19

用这个:

Robolectric.application
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 15

testImplementation "androidx.test:core-ktx:${deps.testrunner}"
Run Code Online (Sandbox Code Playgroud)

并使用:

private val app = ApplicationProvider.getApplicationContext()
Run Code Online (Sandbox Code Playgroud)

  • val appContext = ApplicationProvider.getApplicationContext<Context>() (2认同)
  • 这是最新的Robolectric的正确答案。不建议使用或删除此处提到的其他方法。 (2认同)

The*_*ian 8

对于截至 2019 年的最新 Robolectric 4.3 `

ShadowApplication.getInstance()

` 和

机器人应用

两者都被贬低。所以我正在使用

Context context = RuntimeEnvironment.systemContext;
Run Code Online (Sandbox Code Playgroud)

获取上下文。


use*_*616 5

要获取应用程序上下文,您必须执行以下操作:

  1. 注释@RunWith(RobolectricTestRunner.class)
  2. RuntimeEnvironment.application.getApplicationContext()