1

Robolectric1.1とRoboguice2を使用したテストスイートがあります。正常に動作します。

AppWidgetをアプ​​リケーションマニフェストに次のように追加しました。

<receiver android:name="NearestOpenCragWidgetProvider" android:exported="false">
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
                <meta-data android:name="android.appwidget.provider"
                       android:resource="@xml/nearest_open_crag_widget_info" />
            </receiver>

クラスを作成しました

public class NearestOpenCragWidgetProvider extends AppWidgetProvider {
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            final int N = appWidgetIds.length;

            // Perform this loop procedure for each App Widget that belongs to this provider
            for (int i=0; i<N; i++) {
                int appWidgetId = appWidgetIds[i];

                //get the layout
                RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                        R.layout.nearest_open_crag_widget);

                // Tell the AppWidgetManager to perform an update on the current app widget
                appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
            }
        }
}

およびres/xmlのAppWidgetProviderInfoxml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" >
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/nearest_open_crag_widget"
    android:resizeMode="none">
</appwidget-provider>

また、最も近いレイアウトを追加しました_open_crag_widget

今、私がテストを実行すると、すぐに失敗します

java.lang.ArrayIndexOutOfBoundsException: -1
    at com.xtremelabs.robolectric.ApplicationResolver.replaceLastDotWith$IfInnerStaticClass(ApplicationResolver.java:55)
    at com.xtremelabs.robolectric.ApplicationResolver.registerBroadcastReceivers(ApplicationResolver.java:47)
    at com.xtremelabs.robolectric.ApplicationResolver.resolveApplication(ApplicationResolver.java:36)
    at com.xtremelabs.robolectric.RobolectricTestRunner.createApplication(RobolectricTestRunner.java:491)
    at com.xtremelabs.robolectric.RobolectricTestRunner.setupApplicationState(RobolectricTestRunner.java:368)
    at com.xtremelabs.robolectric.RobolectricTestRunner.internalBeforeTest(RobolectricTestRunner.java:307)
    at com.xtremelabs.robolectric.RobolectricTestRunner.methodBlock(RobolectricTestRunner.java:285)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

アプリケーションは2.3を対象としており、Androidマニフェストでウィジェット宣言をコメントアウトすると、テストの実行が再開されます。

私は明らかに何かお尻を後ろ向きに持っていて、ハイブマインドがそれを見つけることができるかどうか疑問に思いました。

4

1 に答える 1

1

質問は「ばかにならずにウィジェットプロバイダーを追加する方法」であるはずだったことがわかりました。Androidマニフェストでプロバイダーの完全修飾名を使用すると、すべて問題ありません

<receiver android:name="uk.co.some.package.NearestOpenCragWidgetProvider" android:exported="false">
     <blah />
</receiver>
于 2012-09-23T22:25:47.687 に答える