2016-05-20 6 views
0

私はMapFragmentで構成されるクラスを持っています。私はMapFragmentがnullの場合、私が使用している場合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テスト用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(context)を追加します。 setUp()メソッドでは動作しません。 Robolectricでシャドーマップクラスの使い方を教えてください。 – sayvortana

関連する問題