2016-05-20 5 views
0

У меня есть класс, состоящий из MapFragment. Я в состоянии проверить, если MapFragment является недействительным сКак использовать Robolectric для тестирования Активность состоит из MapFragment?

startFragment(mapFragment); 
assertThat(mapFragment.getView()).isNotNull(); 
assertThat(mapFragment.getActivity()).isNotNull(); 
assertThat(mapFragment.getView().findViewById(R.id.mapFragment)).isNotNull(); 

Когда я использую:

startVisibleFragment (MapFragment);

Существует ошибка происходит:

java.lang.NullPointerException: CameraUpdateFactory не инициализируется

Вот полный код:

Цель состоит в том, что если пользователь нажимает на текущую кнопку местоположения, тогда я проверяю правильность местоположения по умолчанию и масштабирования.

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = ConsumerBuildConfig.class, sdk = 21) 
public class MainActivityUnitTesting { 

    private MainActivity mMainActivity; 
    private ImageButton currentLocBtn; 

    @Before 
    public void setUp() throws Exception { 
     mMainActivity = Robolectric.buildActivity(MainActivity.class).create().get(); 
     currentLocBtn = (ImageButton) mMainActivity.findViewById(R.id.currentLocBtn); 
    } 

    @Test 
    public void test_MainActivityTestDefaultLocation(){ 
     startFragment(mMainActivity.mMapFragment); 

     currentLocBtn.performClick(); 

     assertEquals(mMainActivity.mMapFragment.getDefaultLocation(), new LatLng(39.833333, -98.583333)); 

     assertEquals(mMainActivity.mMapFragment.getmDefaultZoom(), 16); 
    } 
} 
  1. ли я что-то пропустил?
  2. Есть ли какие-либо ресурсы, которые хорошо описывают Robolectric testing MapFragment?
+0

Почему вам нужно начать фрагмент? Разве это не часть деятельности? –

+0

@EugenMartynov фрагмент будет инициализирован в активности. Я продолжаю получать CamaraUpdateFactory, не инициализируется, и когда я отлаживаю его, объект GoogleMap имеет значение null. Вот почему я думаю, что фрагмент не инициализирован должным образом. – sayvortana

+0

Я говорю о 'startFragment (mMainActivity.mMapFragment);'. Является ли фрагмент уже прикрепленным в 'onCreate()'? –

ответ

0

попытаться инициализировать CameraUpdateFactory классом MapsInitializer. Поместите этот код в методе setUp():

MapsInitializer.initialize(context); 

Ссылка: https://developers.google.com/android/reference/com/google/android/gms/maps/MapsInitializer#public-method-summary

Редактировать

Проверить это руководство В данном разделе Другие пакеты Тени. Вы можете использовать теневой пакет org.robolectric:shadows-maps. Это ссылка на библиотеку Javadoc

http://robolectric.org/javadoc/3.0/org/robolectric/shadows/maps/package-frame.html

+0

добавление MapsInitializer.initialize (контекст); в методе setUp() не работает. Не могли бы вы объяснить, как использовать класс теневой карты в Robolectric? – sayvortana