为什么这个主题属性会导致我的检测测试崩溃?

时间:2018-01-22 07:16:02

标签: android

任何人都可以帮助我了解导致此次崩溃的原因吗?

Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class android.widget.CheckedTextView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 17: TypedValue{t=0x2/d=0x7f020060 a=-1}
at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:716)

我的仪器测试:

@Test
fun testOnBindViewHolder_setsClickEventForFriendItemView() {
    val mockOnClickPersonItemDelegate: PersonListAdapter.OnClickPersonDelegate = mock()

    personListAdapter = PersonListAdapter(mockOnClickPersonItemDelegate)
    personListAdapter.addOne(getFakePerson())

    val inflater: LayoutInflater = InstrumentationRegistry.getInstrumentation().context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    val itemView = inflater.inflate(R.layout.person_list_item, null)
    val holder = personListAdapter.getViewHolder(itemView)

    // verify that a click on the item calls the click event listener
    personListAdapter.onBindViewHolder(holder, 0)
    holder.itemView.performClick()
    verify(mockOnClickPersonItemDelegate).onClickPersonWithId(ArgumentMatchers.anyString())
}

itemView的视图XML膨胀导致此崩溃。但这并不是因为我在XML中定义或引用了一个维度。位于0x7f020060的缺失维度不是用户定义的;它是AppCompat主题的R.attr.dialogPreferredPadding值。同样,我没有在XML中的任何地方引用CheckedTextView。我试图想象为什么此视图无法在androidTest上下文中运行,因为它可以在main中。

1 个答案:

答案 0 :(得分:0)

这里有同样的问题,我想我找到了解决方案。尝试用ContextThemeWrapper包装用于创建充气机的上下文。这是Java中的示例:

final Context c = new ContextThemeWrapper(InstrumentationRegistry.getTargetContext(), R.style.Theme_AppCompat);
final LayoutInflater inflater = LayoutInflater.from(c);

您还可以使用您的应用程序自定义主题(我猜是从AppCompat主题扩展而来的,而不是R.style.Theme_AppCompat),因此您可以膨胀包含在自定义主题中定义的自定义属性的布局。 / p>