7

La méthode getSupportActionBar() renvoie null lorsque je l'invoque via un scénario de test basé sur Roboelectric et JUnit.getSupportActionBar() renvoie null avec Robolectric

Ceci est mon exemple simple de test:

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

Et voici ma classe d'activité:

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

Toutes les idées claires sur hwo pour résoudre ce problème ?? Dois-je écrire une activité d'ombre ou quelqu'un sait comment travailler avec ces problèmes de barre d'action avec RObolectric ??

Merci pour toute aide

+0

Doit être corrigé dans robolectric 2.2 => http://robolectric.blogspot.be/2013/10/robolectric-22-released.html – Somatik

Répondre

5

Soutien ActionBar
J'ai pu récupérer une instance du support ActionBar en ajoutant une annotation @Config à mon test avec le numéro de build sdk Gingerbread:

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

Une simple configuration du projet peut être vu ici: simple-robolectric



ActionBarSherlock
Vous devez ajouter des fichiers ActionBarSherlock modifiés à votre package de test et appeler les méthodes suivantes dans votre méthode @Before:

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

L'ensemble complet d'instructions se trouve ici: ActionBar and Robolectric working together

Mise à jour
Avec Robolectric 2.2, il vous suffit d'ajouter l'annotation de config "@Config (reportSdk = 10)" à vos méthodes de test ou à votre classe et cela devrait également fonctionner.

+0

Salut Marco, merci pour votre réponse, mais je n'utilise pas ActionBarSherlock. J'utilise android.support.v7.app.ActionBarActivity. Avez-vous des idées à ce sujet? – revolutionary

+0

désolé à ce sujet, j'ai modifié la réponse à votre question. –

+0

Bonjour Marco, merci encore pour votre réponse. Maintenant, je reçois une longue erreur très étrange. Il semble venir gonfler la mise en page pour la MainActivity. – revolutionary