13

私は Robolectric でテストを実行してきましたが、すべて素晴らしいものでした。次に、アプリケーション クラスに Google アナリティクスを実装すると、テストが失敗し始めました。テスト中にビューを膨らませると、失敗が発生するようです。スタック トレースは次のとおりです。

java.lang.NullPointerException: null
at com.google.analytics.tracking.android.AnalyticsGmsCoreClient$AnalyticsServiceConnection.onServiceConnected(AnalyticsGmsCoreClient.java:176)
at org.robolectric.shadows.ShadowApplication$2.run(ShadowApplication.java:209)
at org.robolectric.util.Scheduler$PostedRunnable.run(Scheduler.java:162)
at org.robolectric.util.Scheduler.runOneTask(Scheduler.java:107)
at org.robolectric.util.Scheduler.advanceTo(Scheduler.java:92)
at org.robolectric.util.Scheduler.advanceToLastPostedRunnable(Scheduler.java:68)
at org.robolectric.util.Scheduler.unPause(Scheduler.java:25)
at org.robolectric.shadows.ShadowLooper.unPause(ShadowLooper.java:219)
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:258)
at org.robolectric.shadows.ShadowViewGroup.addView(ShadowViewGroup.java:32)
at android.view.ViewGroup.addView(ViewGroup.java)
at android.view.ViewGroup.addView(ViewGroup.java:3225)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:750)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at org.robolectric.shadows.ShadowView.inflate(ShadowView.java:82)
at android.view.View.inflate(View.java)

BaseActivity の Robolectric コードは次のとおりです。

@RunWith(RobolectricTestRunner.class)
public class BaseActivityTest {

ActivityController<TestActivity> activityController;
TestActivity activity;

@Before
public void setUp(){
    activityController = Robolectric.buildActivity(TestActivity.class).create().start();
}


@After
public void takeDown(){
    activityController.stop().destroy();
    activity = null;
}

@Test
public void testOnPauseState(){
    activity = activityController.resume().pause().get();
    assertFalse(activity.getBus().isActive());
}
}

Google アナリティクスの例に従って、私のアプリケーション クラスは Google アナリティクスを実装します。アプリケーションでテストを実行すると、中断が発生します。Robolectric の MockApplication オブジェクトを実装しようとしましたが、変更はありませんでした。アプリケーション オブジェクトを機能させるには、アプリケーション オブジェクトから Google アナリティクスを削除する必要がありました。Google アナリティクスで Robolectric を実行できるソリューションはありますか?

4

3 に答える 3

19

以前の投稿が機能しない場合は、別の解決策があります。シャドウ アプリケーションへのハンドルを取得し、分析開始インテント バインディングを無視するように構成します。テスト設定でこれを行います。

@Before
public void setup() {
    ShadowApplication shadowApplication = Robolectric.shadowOf(Robolectric.application);
    shadowApplication.declareActionUnbindable("com.google.android.gms.analytics.service.START");
}
于 2013-11-19T00:32:55.447 に答える
2

上記の解決策をすべて試しましたが、どれもうまくいきませんでした。これは最終的に行いました:

public class TestFooApplication extends FooApplication {
    @Override
    public boolean bindService(Intent service, ServiceConnection conn, int flags) {
        return false;
    }
}
于 2015-02-20T08:25:59.733 に答える