43

Android Fragment クラスを単体テストしたいと考えています。

AndroidTestCase を使用してテストをセットアップできますか、それとも ApplicationTestCase を使用する必要がありますか?

これら 2 つの TestCases をどのように使用できるかを示す有用な例はありますか? 開発者サイトのテスト例は最小限で、アクティビティのテストに焦点を当てているようです。

私が他の場所で見つけたのは、AndroidTestCase クラスが拡張された例ですが、テストされているのは 2 つの数値を加算することだけです。または、コンテキストが使用されている場合は、単純な get を実行し、何かが null ではないことをテストします!

私が理解しているように、フラグメントはアクティビティ内に存在する必要があります。では、モック アクティビティを作成するか、アプリケーションまたはコンテキストを取得して、フラグメントをテストできるアクティビティを提供できますか?

独自のアクティビティを作成してから、ActivityUnitTestCase を使用する必要がありますか?

4

4 に答える 4

0

あなたが言っていることを実行し、モックアクティビティを作成して、そこからフラグメントをテストできると確信しています。メイン プロジェクトで互換性ライブラリをエクスポートするだけで、テスト プロジェクトからフラグメントにアクセスできるようになります。サンプル プロジェクトを作成し、ここでコードをテストして、調べたことに基づいて回答を更新します。

互換性ライブラリのエクスポート方法の詳細については、こちらを確認してください。

于 2011-11-20T05:52:22.993 に答える
0

@ abhijit.mitkar の回答に追加します。

フラグメントがテスト中のアクティビティのパブリック メンバーではないというシナリオが考えられます。

protected void setUp() {
   mActivity = getActivity();
   mFragment = new TheTargetFragment();

   FragmentTransaction transaction = mActivity.getSupportFragmentManager().beginTransaction();
   transaction.add(R.id.fragment_container, mFragment, "FRAGMENT_TAG");
   transaction.commit();
}

上記のコードの目的は、フラグメントを、アクセスできる新しいフラグメント オブジェクトに置き換えることです。

以下のコードにより、フラグメント UI メンバーにアクセスできるようになります。

TextView randomTextView= (TextView) mFragment.getView().findViewById(R.id.textViewRandom);

アクティビティから UI を取得しても、期待どおりの結果が得られません。

TextView randomTextView= (TextView) mActivity.findViewById(R.id.textViewRandom);

最後に、UI を変更したい場合。優れた Android 開発者のように、メイン スレッドでそれを行います。

mActivity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // set text view's value
    }
});

注: テストが終了するたびに Thread.sleep() を指定することをお勧めします。ロックアップを回避するには、getInstrumentation().waitForIdleSync(); 常に機能していないようです。

機能テストを行っていたので、ActivityInstrumentationTestCase2を使用しました。

于 2015-04-24T02:50:19.537 に答える