3

テスト対象のアクティビティとは別のアクティビティを実行する必要があるAndroidテストケースを作成しています(テストのためではなく、コンテンツリゾルバーにアクセスしてテレフォニー設定を変更できるようにするためです)。

テストケースから、または別の方法でアクティビティを開始することは可能ですか。

アクティビティのテストに使用されるAndroidTestCaseクラスを認識しています。テストで使用していますが、ContentResolverを使用してテレフォニー設定を変更してから、テスト対象のアクティビティの反応をテストする必要があるため、変更するには別のアプリケーションコンポーネントが必要です。これらの設定。

注:複数のアクティビティテスト(ActivityManagerが必要)の背後にある複雑さを解放しますが、onCreateメソッドにロジックを含めることができるように、そのメソッドを使用して設定を変更するだけです。

4

2 に答える 2

4

Androidは、アクティビティをテストするための特別なインストルメンテーションフレームワークを提供します。アクティビティには、この提供されたフレームワークの外部では呼び出せない複雑なライフサイクルがあるため、このフレームワークを使用する必要があります。アクティビティテストについては、Androidドキュメントの「開発」セクションにある「テスト」リンクを参照してください。これで質問に答えられない場合は、少し言い換えることができます。

編集

AndroidTestCaseではなく、ActivityUnitTestCaseを拡張してActivityをテストする必要があります。テストする必要があるものに固有のより多くの機能を取得します。ActivityUnitTestCaseを拡張すると、launchActivityという関数があります。必要なアクティビティを起動し、アクティビティのインスタンスを提供して、set、get、finishなどのメソッドを呼び出すことができるようにします。これにより、一度に1つまたは複数のアクティビティを操作するために必要なすべてのことが実行されます。

コード例:

@MediumTest
public class Test extends ActivityUniTestCase<HelloActivity> {

    public Test(Class<HelloActivity> activityClass) {
        super(activityClass);
    }

    @MediumTest
    public void testLifeCycleCreate() {
        HelloActivity hActivity = startActivity(new Intent(Intent.ACTION_MAIN), null, null);
        getInstrumentation().callActivityOnStart(hActivity);
        getInstrumentation().callActivityOnResume(hActivity);

        GoodByeActivity gActivity = launchActivity("package.goodbye", GoodByeActivity.class, null);
        gActivity.finish();
    }
}
于 2011-03-25T18:18:34.680 に答える
2

AndroidTestCaseとActivityInstrumentationTestCase2はどちらも、コンテキストを取得するためのメソッドを提供します

AndroidTestCase:

getContext();

ActivityInstrumentationTestCase2

getInstrumentation().getContext();

これらのコンテキストを使用して別のアクティビティを起動できますが、アクセス許可はテスト対象のアプリケーションから採用されるため、contentresolverを使用する場合、テスト対象のアプリケーションで行う設定を変更するための同じアクセス許可しかありません。

私の場合、これは良くないので、独自の権限とバックグラウンドサービスを使用して別のアプリケーションを作成する必要があり、コンテキストを使用してインテントを起動することで制御できました。

于 2011-04-12T22:32:43.040 に答える