在ActivityUnitTestCase中注入Mock上下文失败

时间:2016-12-06 11:52:28

标签: android unit-testing

基于ActivityUnitTestCase

中的文件
  

void setActivityContext(Context activityContext)

     

如果您希望注入模拟,隔离或其他更改的上下文,您可以在此处执行此操作。您必须在调用startActivity(Intent,Bundle,Object)之前调用此函数。如果您希望获得真实的Context,作为构建块,请使用getInstrumentation()。getTargetContext()。

但是当我使用它时如下所示

ContextWrapper context = mock(ContextWrapper.class);
Resources resources = mock(Resources.class);
LayoutInflater layoutInflater = mock(LayoutInflater.class);

when(context.getPackageName()).thenReturn("package_name");
when(context.getResources()).thenReturn(resources);
when(context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).thenReturn(layoutInflater);
        setActivityContext(context);

Intent intent = new Intent(getInstrumentation().getTargetContext(), MyActivity.class);
startActivity(intent, null, null);

它失败了这些错误,我似乎无法找到我想念的东西,我嘲笑上下文因为我需要在上下文中存根某些方法

java.lang.AssertionError: LayoutInflater not found.
at android.view.LayoutInflater.from(LayoutInflater.java:231)
at com.android.internal.policy.PhoneWindow.<init>(PhoneWindow.java:306)
at android.app.Activity.attach(Activity.java:6179)
at android.app.Instrumentation.newActivity(Instrumentation.java:1044)
at android.support.test.runner.MonitoringInstrumentation.newActivity(MonitoringInstrumentation.java:601)
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:147)

1 个答案:

答案 0 :(得分:0)

现在在API级别24中不推荐使用类ActivityUnitTestCase。 改为编写本地单元测试。

请检查:https://developer.android.com/reference/android/test/ActivityUnitTestCase.html#setActivityContext(android.content.Context)