3

単純なActivityUnitTestCaseを生成して、Androidコードのさまざまなフラグメントをテストしようとしています。

public class MenuFragmentTest extends ActivityUnitTestCase<FragmentAdapter> {
    static {
        FragmentAdapter.setFragmentUnderTest(new MenuFragment());
    }

    public MenuFragmentTest() {
        super(FragmentAdapter.class);
    }

    public void testMenuOptions() {
        System.out.println(getActivity().findViewById(1));
    }
}

アプリでフラグメントをテストするために使用しようとしている一般化されたFragmentAdapter:

public class FragmentAdapter extends FragmentActivity {
    static Fragment fragmentUnderTest;

    public static void setFragmentUnderTest(Fragment fragmentUnderTest) {
        FragmentAdapter.fragmentUnderTest = fragmentUnderTest;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout ll = new LinearLayout(this);
        ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        setContentView(ll);

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(fragmentUnderTest, null);

        fragmentTransaction.commit();
    }
}

メインアプリが正常にインストールされた後、Android JUnitTestRunnerは次のように失敗します。

java.lang.RuntimeException: Could not find test class.  Class: com.XXX.core.MenuFragment

テストランナーが実行中のテストクラスを見つけられないのはなぜですか?

4

1 に答える 1

2

どうやら、テストパッケージの名前は本当に重要です:

http://developer.android.com/tools/testing/testing_android.htmlから:

テスト対象のアプリケーションのパッケージ名がcom.mydomain.myappの場合、Androidツールはテストパッケージ名をcom.mydomain.myapp.testに設定します。

パッケージインストルメンテーションのtargetPackage属性を変更するだけでは、テストが別のテストプロジェクトにある場合でも、テスト対象のアクティビティと同じパッケージでテストを作成することはできません。

于 2012-11-04T04:07:52.700 に答える