View.getContext() 在 JUnit 测试中的构造函数 View(context) 之后返回 null



我不明白为什么View.getContext()在这种情况下返回 null:

    @Mock
    Context mContext;
    @Mock
    SensorManager mSensorManager;
    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
    }
/

/...

@Test
public void initWithContext() throws Exception {
    assertNotNull(mContext);
    assertNotNull(mSensorManager);
    when(mContext.getSystemService(Context.SENSOR_SERVICE)).thenReturn(mSensorManager);
    ImageView imageView = new ImageView(mContext);
    assertNotNull(imageView);
    assertNotNull(imageView.getContext()); // Error because getContext() is null
}

构造函数的第一行View

public View(Context context) {
    mContext = context;

方法getContext()

    @ViewDebug.CapturedViewProperty
    public final Context getContext() {
        return mContext;
    }

我不是在嘲笑 ImageView,为什么 View.getContext(( 返回 null?

编辑

when(imageView.getContext()).thenReturn(mContext);
assertNotNull(imageView.getContext()); //Error, imageView.getContext() returns null

如果这些是纯JVM单元测试(即在计算机的JVM上运行,而不是在Android模拟器/设备上运行(,那么你在任何Android类上都没有真正的方法实现。

您正在使用一个可模拟的jar,它只包含删除了"final"的空类和方法,因此您可以模拟它们,但它们并不像运行普通Android时那样工作。

在此处查看更多信息: https://developer.android.com/training/testing/unit-testing/local-unit-tests.html#mocking-dependencies

我想你的问题是@wojtek解释的,你正在运行本地单元测试,你可以模拟一些东西,比如使用上下文来检索一些资源。

如果您需要同时测试视图行为并模拟Android API,我建议您尝试Robolectric框架。

相关内容

  • 没有找到相关文章

最新更新