0

Android インストルメンテーション テストを調べ始めたばかりですが、テストを実行する際にいくつか問題があります。これが私が試したものです:

Android Studio と gradle を使用して、 内に簡単なテスト クラスを作成しましたsrc/instrumentTest/java/。ここにあります:

package at.example.test;

import android.test.ActivityInstrumentationTestCase2;
import android.view.View;
import at.example.activity.MainActivity;

public class BasicAppTestCase extends ActivityInstrumentationTestCase2<MainActivity> {

    private MainActivity activity;

    public BasicAppTestCase() {
        super(MainActivity.class);
    }

    @Override protected void setUp() throws Exception {
        super.setUp();
        activity = getActivity();
    }

    public void testAppHomeButtonExists() {
        View homeButton = activity.findViewById(android.R.id.home);
        assertNotNull("Home button does not exist", homeButton);
    }
}

次に、プロジェクトを右クリックして を選択し、テストを開始しRun 'All Tests'ます。Android Studio がプロジェクトのタスクを実行し、両方のファイルをテスト デバイスにインストールしassembleDebugます。assembleTestapk

その後、テスト デバイスでアプリが正常に起動されます。setUp()メソッドが実行されています (失敗したアサートをメソッドに入れ、 を使用してこれを確認しました) logcat、テストの実行がハングし、現在実行されていることが示さRunning tests...れます。testAppHomeButtonExists

ホームボタンを押してアプリを最小化するか、アプリスイッチャーを開いてアクティビティの状態を変更するまで、テストの実行は続行されません。次に、テスト メソッドtestAppHomeButtonExistsが実行され、(メソッド本体に応じて) 成功または失敗します。ここでも、assert 呼び出しとlogcat出力を使用してこの動作をテストしました。

アップデート:

これはTestRunner、デバイスの logcat ストリームに記録されているものです。

11-11 15:34:59.750  24730-24748/at.example.activity I/TestRunner﹕ started: testAppHomeButtonExists(BasicAppTestCase)

アプリを停止するまで、ログには何も記録されません。アクティビティを停止すると、次のログが記録されます。

11-11 15:35:05.205  24730-24748/at.example.activity I/TestRunner﹕ finished: testAppHomeButtonExists(BasicAppTestCase)
11-11 15:35:05.205  24730-24748/at.example.activity I/TestRunner﹕ passed: testAppHomeButtonExists(BasicAppTestCase)

私は何か間違ったことをしていますか?何か不足していますか?この動作の原因は何ですか?

前もって感謝します!

4

2 に答える 2

0

そのようなビューをチェックする代わりに、次のようなことを試すことができます:

public class BasicAppTestCase extends ActivityInstrumentationTestCase2<MainActivity> {

    private MainActivity activity;
    private Button;
    public BasicAppTestCase() {
        super(MainActivity.class);
    }

    @Override protected void setUp() throws Exception {
        super.setUp();
        activity = getActivity();
        button = (Button) activity
                .findViewById(android.R.id.home);
    }


    public final void testPreconditions() {
        assertNotNull(activity);
    }

    public final void testFieldsOnScreen() {
        final Window window = tAes_Activity.getWindow();
        final View origin = window.getDecorView();
        assertOnScreen(origin, button);

    }
}
于 2013-11-11T12:40:06.973 に答える