我们知道Robolectric通过为未实现的调用提供null,0值来保持沉默。似乎它没有很好地处理方法调用MenuItemCompat.getActionView()
。请参阅以下使用Robolectric无法执行的代码段。
SearchView searchView = (SearchView) MenuItemCompat.getActionView(
menu.findItem(R.id.action_search));
在这个片段中,Robolectric无法检索SearchView对象,使searchView变量为null。也许Robolectric在这里错过了一些影子实现?
调试之后,我发现在调用android.support.v7.internal.view.menu.MenuItemImpl.getActionView()
之前,MenuItemImpl
实例已经没有mActionView
(mActionView = null),而非compat中的实例已经有了ShadowMenuInflater.addActionViewToItem()
。
我调试越多,我就越了解问题。问题是这一行String actionViewClassName =
attributes.getAttributeValue(ANDROID_NS, "actionViewClass");
{{1}}
它只关心ANDROID_NS而不关心APP_NS,因为AppCompat改为使用APP_NS。
我认为如果Robolectric给我例外情况让我知道要实施哪些阴影会更好。
我还将此案件提交给GitHub