Robolectric を使用して、android-support パッケージを使用している Android アプリケーションのテストを実行しようとしています。私の onCreate() メソッドで私は呼び出します
getSupportLoaderManager().initLoader(0, null, this);
残念ながら、ここで getSupportLoaderManager() は null を返します。Robolectric で互換性クラスを利用できるようにするために何か準備する必要はありますか?
テスト プロジェクトのクラスパスに android.jar (android-8) と android-support-v4.jar があり、robolectric-1.2 スナップショット バージョンがあります。
テストクラス:
@RunWith(RobolectricTestRunner.class)
public class HoebAppActivityTest {
@Test
public void shouldStartActivity() {
final MyActivity activity = new MyActivity();
System.out.println(activity.getSupportLoaderManager()); // return null
activity.onCreate(null);
}
}
編集:
System.out.println(Robolectric.directlyOnFullStack(activity)
.getSupportLoaderManager());
android.support.v4.app.LoaderManagerImpl@9a90b9 を出力するので、これをアクティビティにフィードバックするだけでよいのでしょうか? ここに近づいているようです。
Edit2: 自分の ShadowFragmentActivity をバインドしようとしました:
@Implements(FragmentActivity.class)
public class ShadowFragmentActivity extends
com.xtremelabs.robolectric.shadows.ShadowFragmentActivity {
@RealObject
private FragmentActivity realActivity;
@Implementation
public LoaderManager getSupportLoaderManager() {
return Robolectric.directlyOnFullStack(realActivity)
.getSupportLoaderManager();
}
}
縛られた
Robolectric.bindShadowClass(ShadowFragmentActivity.class);
これは今のところ機能しているようです。それが私が望むことをするかどうかを確認するために、さらに試してみる必要があります。これが何らかの方法で正しい方法であるかどうかはわかりません。