我不明白为什么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框架。