4

我设法在包含 robots-solo-3.2.1.jar 的 XXTest.java 中编写了两个测试用例,幸运的是在 JUnit 视图中它显示第一个已完成,该设备完全可以正常工作(也在模拟器上)。

然后它继续到第二个,但它只是永远挂在那里!抱歉,我无法在我的帐户中附加屏幕截图。

这是我的代码:

    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 个测试用例工作正常!

请问哪里出错了??我在某处遗漏了什么吗?为什么第二个测试用例没有运行?

顺便提一句。一个测试项目中可以有多个类扩展 ActivityInstrumentationTestCase2 吗?好奇的!

4

2 回答 2

3

您需要在您的 tearDown() 中使用 solo.finishOpenedActivities()。

于 2012-05-04T05:37:58.590 回答
2

@Robert-这是 Activity 测试本身的问题,而不是特定于机器人的问题。

对于第一个测试方法:您的基本流程如下所示: 1>在 setUp() 方法中加载主要活动(例如MainActivity)> 在您的 testMethod1() 中执行一些操作 - 这会导致您进入另一个活动(例如AnotherActivity ) > 并在 tearDown() 中杀死 setUp() 方法中启动的活动,即MainActivity

注意:但AnotherActivity仍然有效

对于第二种测试方法:基本流程如下: 2>在 setUp() 方法中尝试再次加载主活动(比如MainActivity),虽然之前启动的AnotherActivity还没有被杀死,所以它挂在那里,它甚至没有进入 testMethod2() fr 执行 -

注意:当执行标记指向 testMethod2() 时,eclipse 图形运行器显示它挂起,人们认为它卡在 testMethod2() 中 - 但问题在于 testMethod2() 的 setUp() 而不是 testMethod2() 本身。

解决方案: 1>只需查看您的交叉活动导航 - 在每个 testMethod() 结束时使用 solo.goBack()从您当前的活动返回到相同的主要活动MainActivity (由于您的操作,您已登陆)

结果 - 在 testMethod1() 结束时,仅保留在 setUP() 中打开的主要活动。所以它被成功杀死。没有活动仍然活着,对于 testMethod2()。setUP() 能够再次加载MainActivity而不会挂起 - 并且 testMethod2() 被执行。

希望它澄清:)

于 2014-08-28T15:02:22.613 回答