2

単体テストを行っているAndroidアプリがあります。それぞれ複数のテストメソッドを持つ4つのテストクラスがあります。テストスイートからすべて同時に実行します。エミュレーターで、テストの実行中にテストがフリーズするという問題が発生しました。実際のデバイスを使用するように切り替えたところ、問題は解決しました。

数週間早送りすると、デバイスでテストを実行しているときに同じ問題が発生しません。私はここ数日Googleを利用して解決策を見つけようとしていますが、何も役に立ちませんでした。

問題
すべてのテストを実行しようとすると、最終的にテストがフリーズします。そして、フリーズとは、テスト自体がフリーズすることを意味します。私はそれが電話か日食かもしれないという1つの解決策を見ました。私は自分の電話を再起動し、Eclipse自体を含むEclipseのすべてを更新しました。ビューを変更して、日食ビューが更新されていないかどうかを確認しましたが、いずれも役に立ちませんでした。また、v3の代わりにjunitv4ライブラリを使用してみました。

テストメソッドを個別に実行すると、すべて実行されて合格します。テストスイートからすべてを実行した場合にのみ、失敗します。

ログ
私はログをチェックしました、そしてこれは私が得るものです:
03-13 12:11:04.526: I/TestRunner(23175): started: testCheckShowDialogEnabled(com.package.name.MainActivityTest)

その後、ログには他に何もありません。

デバイス
上アプリが終了し、画面から削除されます。次のテストの開始時に再開されませんでした。

コード
これは私が関連すると思うコードです。さらにコードが必要な場合は、私に知らせてください。

public class AllTests extends TestSuite {
    public static Test suite() {
        TestSuite suite = new TestSuite();

        suite.addTestSuite(MainActivityTest.class);
        suite.addTestSuite(DatabaseHandlerTest.class);
        suite.addTestSuite(ClassOneTest.class);
        suite.addTestSuite(AnotherActivityTest.class);

        return suite;
    }
}

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {

    public MainActivityTest() {
        super("com.package.name", MainActivity.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();


        mMainActivity = getActivity();
        mSolo = new Solo(getInstrumentation(), mMainActivity);
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();

        mMainActivity = null;
    }
    // all the test methods
}

私のすべてのテストクラスは、同様に実装setup()tearDown()ます。

私のテストがフリーズし続ける理由を知っている人はいますか?ヘルプや提案は大歓迎です。

4

1 に答える 1

3

@smkは、これに対する解決策を見つける方向に私を向けました。私はこれに変更tearDown()しました:

@Override
protected void tearDown() throws Exception {
    mSolo.finishOpenActivities();
    super.tearDown();
}

今ではうまくいきます!

于 2013-03-13T20:08:25.243 に答える