4

XXTest.java に robotium-solo-3.2.1.jar を含めて 2 つのテスト ケースを作成できました。幸いなことに、JUnit ビューでは最初のテスト ケースが完了したことが示され、デバイスは (エミュレータ上でも) 正確に動作しました。

それから2つ目に進みますが、永遠にぶら下がっています! 申し訳ありませんが、私のアカウントにスクリーン ショットを添付できません。

ここに私のコードがあります:

    public class XXTest extends ActivityInstrumentationTestCase2<SignInActivity> {

      private Solo solo;
      private Activity mActivity;
      private static final String account = "someone";
      private static final String pwd = "123456";

      @SuppressWarnings("deprecation")
      public XXTest() {
        super("com.acompany.android", SignInActivity.class);
      }

      protected void setUp() throws Exception {
        super.setUp();
        this.mActivity = getActivity();
        solo = new Solo(getInstrumentation(), mActivity);
      }

      @Smoke
      public void testLogIn() throws Exception {

        EditText accountInput = (EditText) solo.getView(R.id.edit_account);
        EditText pwdInput = (EditText) solo.getView(R.id.edit_password);

        solo.clearEditText(accountInput);
        solo.clearEditText(pwdInput);

        solo.enterText(accountInput, account);
        solo.enterText(pwdInput, pwd);
        solo.clickOnButton(mActivity.getResources()
            .getString(R.string.text_sign_in));

        solo.waitForActivity("MainActivity");
        solo.assertCurrentActivity("Expect MainActivity shown...", "MainActivity");
        boolean expected = true;
        boolean actual = solo.searchButton(mActivity.getResources().getString(
            R.string.welcome_dialog_start));
        assertEquals("find friend dialog not shown", expected, actual);
      }

      @Smoke
      public void testOpenPref() throws Exception {

        solo.goBack();
        solo.clickOnMenuItem(mActivity.getResources().getString(
            R.string.text_preferences));
        solo.assertCurrentActivity("Expected PrefActivity..", "PrefActivity");

        solo.goBackToActivity("MainActivity");
        solo.assertCurrentActivity("Expected MainActivity..", "MainActivity");
      }

      protected void tearDown() throws Exception {
        super.tearDown();
      }
}

Robotium チュートリアルから NotePadTest.java のサンプルを検索しました。その中の 3 つのテスト ケースは問題なく動作します。

どこが悪いのか教えてください?? 私はどこかで何かを逃していますか?2 番目のテスト ケースが実行されないのはなぜですか?

ところで。テスト プロジェクトに ActivityInstrumentationTestCase2 を拡張するクラスが複数存在することはありますか? 奇妙な!

4

2 に答える 2

3

TearDown() で solo.finishOpenedActivities() を使用する必要があります。

于 2012-05-04T05:37:58.590 に答える
2

@Robert - これは、ロボティウム固有の問題ではなく、アクティビティ テスト自体の問題です。

最初のテスト メソッド: 基本的なフローは次のようになります: 1> setUp() メソッドでメイン アクティビティをロードします ( MainActivity など) > testMethod1() でいくつかの操作を実行します - その結果、別のアクティビティに到達します (たとえば、AnotherActivity ) > そして、tearDown() では、MainActivity である setUp() メソッドで起動されたアクティビティを強制終了します

注: ただし、AnotherActivityはライブのままです

2 番目のテスト メソッド: 基本的なフローは次のようになります: 2>setUp() メソッドで、メイン アクティビティ ( MainActivity など) をもう一度ロードしてみますが、以前に起動したAnotherActivityはまだ強制終了されていないため、そこでハングします。 testMethod2() fr 実行に入ることさえしません -

注: eclipse グラフィカル ランナーは、実行マーカーが testMethod2() を指している間にハングすることを示しています。人々は testMethod2() でスタックしたと考えていますが、問題は testMethod2() 自体ではなく、testMethod2() の setUp() にあります。

解決策: 1>クロス アクティビティ ナビゲーションを確認してください。各 testMethod() の最後で、solo.goBack() を使用して、現在のアクティビティから同じメイン アクティビティMainActivityに戻ります (アクションが原因で着陸しました)。 )

結果 - testMethod1() の最後に、setUP() で開かれたメイン アクティビティのみが残ります。したがって、それは正常に強制終了されます。アクティビティは生きたままではなく、testMethod2() の場合、setUP() はハングせずにMainActivityを再度ロードでき、testMethod2() が実行されます。

それが明確になることを願っています:)

于 2014-08-28T15:02:22.613 に答える