7

Metoda getSupportActionBar() zwraca wartość null, gdy wywołuję ją przez przypadek testowy oparty na Roboelectric i JUnit.getSupportActionBar() zwraca null przy Robolectric

To jest mój prosty przypadek testowy:

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"); 
} 
} 

A to moja klasa aktywny:

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); 
    } 
} 
} 

Wszelkie dobre pomysły na hwo to naprawić ?? Czy muszę napisać jakąś aktywność cienia lub czy ktoś wie jak pracować z tymi problemami z ruchem obrotowym z RObolectric?

Dzięki za wszelką pomoc

+0

Powinien zostać naprawiony w robolectric 2.2 => http://robolectric.blogspot.be/2013/10/robolectric-22-released.html – Somatik

Odpowiedz

5

Pomoc ActionBar
udało mi się wrócić instancję Wsparcia ActionBar dodając adnotację @Config do mojego testu z piernika liczby SDK produkcji:

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

prosta konfiguracja projektu można zobaczyć tutaj: simple-robolectric



ActionBarSherlock
Trzeba dodać zmodyfikowane pliki ActionBarSherlock do pakietu testowego i wywołać następujące metody w swojej metodzie @Before:

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

Pełny zestaw instrukcji można znaleźć tutaj: ActionBar and Robolectric working together

Aktualizacja
Z Robolectric 2.2 wystarczy dodać adnotację konfiguracji "@Config (reportSdk = 10)" do swoich metod testowych lub klasy i powinna również działać.

+0

Cześć Marco, dziękuję za odpowiedź, ale nie używam ActionBarSherlock. Używam atrybutu android.support.v7.app.ActionBarActivity. Czy masz jakieś pomysły na ten temat? – revolutionary

+0

Przepraszam za to, zmieniłem odpowiedź na twoje pytanie. –

+0

Witaj Marco, jeszcze raz dziękuję za odpowiedź. Teraz otrzymuję bardzo dziwny długi błąd. Wygląda na to, że nadpisuje układ MainActivity. – revolutionary