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

其实,我需要得到一个API调用的响应,因为我需要Context

更新。

只用于版本1.x和2.x:

 Robolectric.application; 

而对于3.x版本:

 RuntimeEnvironment.application; 

您可以使用

 RuntimeEnvironment.application 

用这个:

 Robolectric.application 

使用Robolectric.getShadowApplication()而不是直接使用Robolectric.getShadowApplication()更安全。

同意@EugenMartynov和@rds的答案….

在Volley-Marshmallow-Release中可以find一个简单的例子

在NetworkImageViewTest.java中

// mNIV = new NetworkImageView(Robolectric.application); mNIV = new NetworkImageView(RuntimeEnvironment.application);

排球链接可用https://android.googlesource.com/platform/frameworks/volley/+/marshmallow-release

你必须在android studio的抽排模块中添加依赖:

dependencies { testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.robolectric:robolectric:3.1.2' }

在你的情况下,我认为你应该注意你正在testing的是什么。 有时遇到无法testing的代码或看似不可testing的代码是一个标志,也许你的代码需要重构。

对于API调用响应,您可能不希望自己testingAPI调用。 可能没有必要testing可以从任何Web服务发送/接收信息,而是代码以预期的方式处理和处理响应。

在这种情况下,重构您要testing的代码可能会更好。 把接受简单String类的响应parsing/处理分解出来,并通过注入示例string响应来对该类进行testing。

这或多或less地遵循单一责任依赖倒置的思想( SOLID中的SD

好吧,所以我知道很多人之前说过这个答案,可能已经过时了

  when(mockApplication.getApplicationContext()).thenReturn(RuntimeEnvironment.application); when(mockApplication.getFilesDir()).thenReturn(RuntimeEnvironment.application.getFilesDir()); sharedPref = RuntimeEnvironment.application.getSharedPreferences(KEY_MY_PREF, Context.MODE_PRIVATE); sut = new BundleManagerImpl(mockApplication, processHtmlBundle, resultListener, sharedPref); 

我得到null,因为when()部分是在初始化之后。 这可能会帮助你们中的一些人。

我也有

 @RunWith(CustomRobolectricTestRunner.class) @Config(constants = BuildConfig.class) 

在课程开始的时候

  when(mockApplication.getApplicationContext()).thenReturn(RuntimeEnvironment.application.getApplicationContext()); works 

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

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