7

Метод getSupportActionBar() возвращает null, когда я вызываю его через тестовый пример, основанный на Roboelectric и JUnit.getSupportActionBar() возвращает null с Robolectric

Это мой простой тест:

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

И это мой класс активность:

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

Любые яркие идеи на HWO, чтобы это исправить ?? Мне нужно написать какую-то теневую активность, или кто-нибудь знает, как работать с этими проблемами в баре с RObolectric ??

Спасибо за любую помощь

+0

Должно быть установлено в robolectric 2.2 => http://robolectric.blogspot.be/2013/10/robolectric-22-released.html – Somatik

ответ

5

Поддержка ActionBar
Я был в состоянии получить обратно экземпляр поддержки ActionBar путем добавления аннотаций @Config в моем тесте с Gingerbread номером сборки: SDK

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

простой проект установки можно увидеть здесь: simple-robolectric



ActionBarSherlock
Вы должны добавить измененные файлы ActionBarSherlock в тестовом пакете и вызвать следующие методы в вашем методе @Before:

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

Полный набор инструкций можно найти здесь: ActionBar and Robolectric working together

Обновление
С Robolectric 2.2 вам нужно добавить аннотацию конфигурации «@Config (reportSdk = 10)» к вашим методам тестирования или классу, и она также должна работать.

+0

Привет, Марко, спасибо за ваш ответ, но я не использую ActionBarSherlock. Я использую android.support.v7.app.ActionBarActivity. Есть ли у вас какие-либо идеи по этому поводу? – revolutionary

+0

Извините, но я изменил ответ на ваш вопрос. –

+0

Привет, Марко, еще раз спасибо за ваш ответ. Теперь я получаю очень странную длинную ошибку. Кажется, он надувает макет для MainActivity. – revolutionary