Answers:
更新。
仅用于1.x和2.x版本:
Robolectric.application;
对于3.x版本:
RuntimeEnvironment.application;
对于4.x版本:
添加到您的build.gradle
文件:
testImplementation 'androidx.test:core:1.0.0'
使用以下方法检索上下文:
ApplicationProvider.getApplicationContext()
RuntimeEnvironment.application
在静态代码中使用(例如带注释的方法@BeforeClass
),因为Robolectric可能此时不会初始化,其值将为null
。
加
testImplementation "androidx.test:core-ktx:${deps.testrunner}"
并使用:
private val app = ApplicationProvider.getApplicationContext()
这对我来说适用于Robolectric 3.5.1: ShadowApplication.getInstance().applicationContext
RuntimeEnvironment.application
, RuntimeEnvironment.application.getApplicationContext()
如果它对您有用。
从7月21日的4.0-alpha-3版本开始,它们已删除 ShadowApplication.getApplicationContext()
。坚持使用RuntimeEnvironment.application.getApplicationContext()
注释任何测试@RunWith(RobolectricTestRunner::class)
。
顺便说一句,他们当前的指南中有一个使用以下示例获取字符串资源的示例:
final Context context = RuntimeEnvironment.application;
(注意,对于的javadoc RuntimeEnvironment
和ShadowApplication
目前反映非字母3.X释放。)
在某些情况下,您可能需要应用程序的上下文,而不是Robolectris默认上下文。例如,如果您想获取软件包名称。默认情况下,Robolectric将返回您的org.robolectric.default
软件包名称。要获取您的真实包裹名称,请执行以下操作:
build.gradle
testImplementation 'org.robolectric:robolectric:4.2.1'
您的测试课程:
@RunWith(RobolectricTestRunner.class)
@Config( manifest="AndroidManifest.xml")
public class FooTest {
@Test
public void fooTestWithPackageName(){
Context context = ApplicationProvider.getApplicationContext();
System.out.println("My Real Package Name: " + context.getPackageName());
}
}
相比直接使用Robolectric.getShadowApplication()
,使用起来更安全Robolectric.application
。
Robolectric.application
同意@EugenMartynov和@rds的答案。
一个简单的例子可以在Volley-Marshmallow-Release中找到
在NetworkImageViewTest.java中
// mNIV = new NetworkImageView(Robolectric.application);
mNIV = new NetworkImageView(RuntimeEnvironment.application);
排球链接可用 https://android.googlesource.com/platform/frameworks/volley/+/marshmallow-release
您必须在android studio中的volley模块中添加依赖项,如下所示:
dependencies {
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
testCompile 'org.robolectric:robolectric:3.1.2'
}
好的,所以我知道很多其他人以前曾说过这个答案,而且可能已经过时了
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()部分在sut初始化之后。它可能对您有些帮助。
我也有
@RunWith(CustomRobolectricTestRunner.class)
@Config(constants = BuildConfig.class)
在课程开始时
也
when(mockApplication.getApplicationContext()).thenReturn(RuntimeEnvironment.application.getApplicationContext()); works