3

次のような署名を持つクラスを使用して、Androidプラットフォームのテストケースを構築しているとします。

public class AccountTest extends ActivityInstrumentationTestCase2<MainActivity> { ... }

Robotiumフレームワークを使用した次のようなテスト方法があるとします。

public void testCreateAccount() {
    solo.clickOnButton("Add Account");
    solo.clickOnButton("Next");

    ...
}

テストケースが完了すると、インストルメントされたアクティビティは迅速に強制終了されます。少なくとも次に何をしたいのかを決定し、次の数行をコーディングするために、終了時にそれを存続させる方法はありますか?

4

3 に答える 3

2

Android JUnit TestはJUnitの上に構築されているため、JUnitテストのライフサイクルの基本的なルールに従います。

  • テストケースのsetUp()メソッドを呼び出します
  • テストメソッドを呼び出します
  • テストケースのtearDown()メソッドを呼び出します

テストケースが完了すると、インストルメントされたアクティビティは迅速に強制終了されます。

理由は、 ActivityInstrumentationTestCase2のソースコードを参照してください。

@Override
protected void tearDown() throws Exception {
  // Finish the Activity off (unless was never launched anyway)
  Activity a = super.getActivity();
  if (a != null) {
    a.finish();
    setActivity(null);
  }

  // Scrub out members - protects against memory leaks in the case where someone 
  // creates a non-static inner class (thus referencing the test case) and gives it to
  // someone else to hold onto
  scrubClass(ActivityInstrumentationTestCase2.class);

  super.tearDown();
}

少なくとも次に何をしたいのかを決定し、次の数行をコーディングするために、終了時にそれを存続させる方法はありますか?

考えられる回避策は次のとおりです。

  1. super.tearDown();を呼び出さずに、AccountTestクラス(ActivityInstrumentationTestCase2クラスを拡張する)のteardown()メソッドを完全にオーバーライドします。
  2. カスタマイズされたActivityInstrumentationTestCase3クラス(ActivityTestCaseクラスを拡張する)を作成して、teardown()メソッドでの終了アクティビティを回避します。

どちらのアプローチでも、メモリリークを回避するために、teardown()メソッドを慎重に実装する必要があります。

お役に立てれば。

于 2012-05-02T02:28:41.413 に答える
1

結局のところ、Nativedriverライブラリを使用することで、基本的に私が望むことを簡単に達成できます。

http://code.google.com/p/nativedriver/

テストケースの最後を省略driver.quit()すると、アクティビティが存続します。これは、テストケースを最初に開発するときに非常に便利です。

于 2012-06-06T19:21:22.657 に答える
0

私は同じ問題を抱えています。最後に私は使用しますSleep().

while(true)
{
   Thread.Sleep(1000);
   // do other things when the main thread wake
}

上記のコードを任意のテスト方法に入れると、計測器Activityは終了しません。

お役に立てば幸いです。

于 2013-10-31T13:19:12.787 に答える