解析android时的Robolectric InflateException:background =" @android:drawable / alert_dark_frame"

时间:2015-02-25 14:50:33

标签: java android junit robolectric

<LinearLayout
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="70dp"
    xmlns:android="http://schemas.android.com/apk/res/android" >
 <!-- MORE BUTTONS HERE -->
<Button
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:text="Ok"
        android:id="@+id/w_save" android:layout_weight="1"/>
<TextView
        android:visibility="gone"
        android:textColor="@android:color/holo_blue_light"
        android:text="Trasa już ustawiona"
        android:gravity="center"
        android:background="@android:drawable/alert_dark_frame"
        android:id="@+id/widget_alreadySet"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />

这是实际的测试代码:

    @Test
public void widgetButtonPressTest() throws Exception {
    ShadowAppWidgetManager appWidgetManager = new ShadowAppWidgetManager();
    int widgetId = appWidgetManager.createWidget(NewTripWidgetProvider.class, R.layout.new_trip_widget);
    View view = appWidgetManager.getViewFor(widgetId);
    Button u1 = (Button) view.findViewById(R.id.w_u1);
    u1.performClick();

    NewTripWidgetReceiver mWidgetReceiver = mock(NewTripWidgetReceiver.class);

}

当我试图执行测试时,它失败并出现以下异常:

android.view.InflateException: XML file .\res\layout\new_trip_widget.xml line #-1 (sorry, not yet implemented): Error inflating class android.widget.TextView
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at org.robolectric.shadows.RoboLayoutInflater.onCreateView(RoboLayoutInflater.java:38)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at org.robolectric.shadows.ShadowAppWidgetManager.createWidgetView(ShadowAppWidgetManager.java:223)
at org.robolectric.shadows.ShadowAppWidgetManager.createWidgets(ShadowAppWidgetManager.java:205)
at org.robolectric.shadows.ShadowAppWidgetManager.createWidget(ShadowAppWidgetManager.java:189)
at pl.fragoff.gascharger.roboelectrictests.WidgetTest.widgetButtonPressTest(WidgetTest.java:45)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:236)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:158)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

我发现删除以下行可以解决问题:

android:background="@android:drawable/alert_dark_frame"

任何想法如何解决这个问题而不从视图中删除android:backgorund样式?我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:1)

我明白了(如果有人有类似的问题)。

我的android sdk文件夹中没有alert_dark_frame.xml。 ... / android / sdk / platforms / android-xx / data / res / drawable / alert_dark_frame.xml - 它必须存在。否则它不会工作。