1

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

これは今のところ機能しているようです。それが私が望むことをするかどうかを確認するために、さらに試してみる必要があります。これが何らかの方法で正しい方法であるかどうかはわかりません。

4

1 に答える 1

3

Robolectric 1.x では、Android サポート ライブラリのサポートが不十分でした。Robolectric 2.0 は大幅に改善されており、フラグメントを完全にサポートしています。本日、アルファ版がリリースされました。

<dependency>
  <groupId>org.robolectric</groupId>
  <artifactId>robolectric</artifactId>
  <version>2.0-alpha-1</version>
<dependency>
于 2013-01-31T04:31:29.937 に答える