测试中的Robolectric和Google Analytics错误

Max*_*ell 13 android google-analytics robolectric

我一直在用Robolectric进行测试,这一切都很棒.然后我将Google Analytics实施到我的应用程序类,测试开始失败.当我在测试期间膨胀视图时,似乎发生了失败.这是堆栈跟踪:

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)
Run Code Online (Sandbox Code Playgroud)

这是我的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());
}
}
Run Code Online (Sandbox Code Playgroud)

按照Google Analytics示例,我的Application类实现了Google Analytics.每当我使用我的应用程序运行测试时,就会发生中断.我已经尝试过实现Robolectric的MockApplication对象,但是没有变化; 我必须从我的Application对象中删除Google Analytics才能使其运行.有没有人有任何解决方案可以让我使用谷歌分析运行Robolectric?

Geo*_*pas 19

如果之前的帖子不起作用,还有另一种解决方案.获取影子应用程序的句柄并将其配置为忽略分析开始意图绑定.在您的测试设置中执行此操作.

@Before
public void setup() {
    ShadowApplication shadowApplication = Robolectric.shadowOf(Robolectric.application);
    shadowApplication.declareActionUnbindable("com.google.android.gms.analytics.service.START");
}
Run Code Online (Sandbox Code Playgroud)

  • 要在Robolectric 3.0中执行此操作,请查看以下答案:http://stackoverflow.com/a/28738542/1369016 (2认同)

Mar*_* RS 3

如果您使用 Google Analytics V3,我有两个建议给您:

1)您是否尝试在运行测试时调用此方法?

 googleAnalytics.setAppOptOut(true); 
Run Code Online (Sandbox Code Playgroud)

这将在测试的生命周期内禁用谷歌分析。

2) 在与当前应用程序相同的包中创建一个测试应用程序类,并将其命名为相同的名称,但在名称前面添加“Test”。该应用程序将在您的测试期间创建,您可以将“setAppOptOut”设置为 true,也可以从中完全忽略 GoogleAnalytics。

更多信息可以在这里找到:http://robolectric.blogspot.com/2013/04/the-test-lifecycle-in-20.html