两个机器人测试用例,但第二个挂起没有响应(在JUnit View中)

时间:2012-05-04 04:54:41

标签: android junit robotium

我设法在我的XXTest.java中编写了两个包含robotium-solo-3.2.1.jar的测试用例,幸运的是在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吗?好奇!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

对于第一种测试方法: 您的基本流程如下: 1>在setUp()方法中加载主要活动(比如 MainActivity )&gt;在testMethod1()中执行一些操作 - 这会导致您进入另一个活动(例如 AnotherActivity )&gt;在tearDown()中,你可以在setUp()方法中杀死已启动的活动,该方法是 MainActivity

注意:但 AnotherActivity 仍然有效

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

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

解决方案: 1&gt;只需查看您的交叉活动导航 - 在每个testMethod()的末尾使用solo.goBack()从您当前的Activity恢复到相同的主要活动 MainActivity (您已登陆因为你的行为)

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

希望它澄清:)