如何使用Robolectric测试Activity由MapFragment组成?

时间:2016-05-20 20:17:29

标签: android unit-testing robolectric

我有一个由MapFragment组成的类。我可以使用

测试MapFragment是否为null
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测试MapFragment?

1 个答案:

答案 0 :(得分: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