7

Il metodo getSupportActionBar() restituisce null quando lo invoco tramite un caso di test basato su Roboelectric e JUnit.getSupportActionBar() restituisce null con Robolectric

Questa è la mia semplice test case:

package com.mobile.test; 

import static org.hamcrest.CoreMatchers.equalTo; 
import static org.junit.Assert.assertEquals; 
import static org.junit.Assert.assertThat; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.robolectric.Robolectric; 
import org.robolectric.RobolectricTestRunner; 
import android.app.Activity; 
import android.content.Intent; 
import com.mobile.android.core.R; 
import com.mobile.android.core.activity.MainActivity; 
import com.mobile.android.core.activity.TestActivity; 

@RunWith(RobolectricTestRunner.class) 
public class NavigationDrawerTest { 
private Activity activity; 

@Test 
public void testNavigationDrawer() { 
    activity = Robolectric.buildActivity(MainActivity.class).create().get(); 
    String hello = activity.getResources().getString(R.string.drawer_open); 
    System.out.println(hello); 
    assertEquals(hello, "Menu"); 
} 
} 

E questa è la mia classe di attività:

public class MainActivity extends ActionBarActivity { 
// Drawer related 
private DrawerLayout mDrawerLayout; 
private ListView mDrawerList; 
private ActionBarDrawerToggle mDrawerToggle; 
String[] mDrawerOptions; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // enable ActionBar app icon to behave as action to toggle nav-drawer 
    if (getSupportActionBar() != null) { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
    } 
} 
} 

Tutte le idee brillanti su hwo per risolvere questo problema ?? Devo scrivere qualche attività ombra o qualcuno sa come lavorare con questi problemi della barra delle azioni con RObolectric ??

Grazie per qualsiasi aiuto

+0

Dovrebbe essere risolto in robolectric 2.2 => http://robolectric.blogspot.be/2013/10/robolectric-22-released.html – Somatik

risposta

5

Supporto ActionBar
sono stato in grado di tornare un'istanza del supporto ActionBar aggiungendo un'annotazione @Config al mio test con il pan di zenzero numero di sdk costruzione:

@Test @Config(reportSdk = 10) 
public void actionbarTest(){ 
.... Your Test here 
} 

Una semplice impostazione del progetto può essere visto qui: simple-robolectric



ActionBarSherlock
Bisogna aggiungere file ActionBarSherlock modificati per il pacchetto di test e chiamare i seguenti metodi nel metodo @Before:

ActionBarSherlock.registerImplementation(ActionBarSherlockRobolectric.class); 
ActionBarSherlock.unregisterImplementation(ActionBarSherlockNative.class); 
ActionBarSherlock.unregisterImplementation(ActionBarSherlockCompat.class); 

La serie completa di istruzioni si possono trovare qui: ActionBar and Robolectric working together

Aggiornamento
Con Robolectric 2.2 è sufficiente aggiungere l'annotazione di configurazione "@Config (reportSdk = 10)" ai metodi di prova o alla classe e dovrebbe funzionare anche.

+0

Ciao Marco, grazie per la tua risposta, ma non sto usando ActionBarSherlock. Sto usando android.support.v7.app.ActionBarActivity. Avete qualche idea al riguardo? – revolutionary

+0

scusami, ho modificato la risposta alla tua domanda. –

+0

Ciao Marco, grazie ancora per la tua risposta. Ora sto ottenendo un errore molto strano lungo. Sembra che si stia gonfiando il layout per MainActivity. – revolutionary

Problemi correlati