我们如何在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中的S和D )
好吧,所以我知道很多人之前说过这个答案,可能已经过时了
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
要获得应用程序上下文,您必须执行以下操作
- 注释@RunWith(RobolectricTestRunner.class)
- RuntimeEnvironment.application.getApplicationContext()