Ho eseguito test con Robolectric ed è stato tutto fantastico. Quindi ho implementato Google Analytics nella mia classe di applicazione e i test hanno iniziato a fallire. L'errore sembra verificarsi quando gonfio le visualizzazioni durante i test. Ecco l'analisi dello stack:Errore nei test su Robolectric e 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)
Ecco il codice per il mio Robolectric BaseActivity:
@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());
}
}
Dopo la Google Analytics example, la mia classe di applicazione implementa Google Analytics. Ogni volta che eseguo i test con la mia applicazione, si verifica l'interruzione. Ho provato ad implementare l'oggetto MockApplication di Robolectric, ma questo non ha avuto alcun cambiamento; Ho dovuto rimuovere Google Analytics dal mio oggetto Application per farlo funzionare. Qualcuno ha qualche soluzione che mi consenta di eseguire Robolectric con Google Analytics?
La seconda opzione ha funzionato. Una cosa importante da ricordare che è spiegato nel collegamento è che le classi dell'applicazione devono essere nello stesso pacchetto (insieme con lo stesso nome con "Test" anteposto alla classe dell'applicazione di test). La prima opzione, anche se ha senso, non sembra registrarsi durante i test. – Maxwell
La prima opzione non funziona per me a causa di che non riesce a 'GoogleAnalytics.getInstance (questo)' pertanto non raggiunge mai la riga che contiene 'setAppOptOut (true)' –