测试一个按钮是否在android junit(pref without robotium)中启动一个新活动?

时间:2012-02-23 00:50:44

标签: android junit

我无法找到任何好的帮助。我只有几个按钮就有一个简单的活动,我需要测试它们是否重定向到正确的新页面(活动)。

public void testButton() {
         button.requestFocus();
         button.performClick();

      }

除此之外,我真的不知道。这些教程对此非常无益:/

4 个答案:

答案 0 :(得分:31)

您需要ActivityMonitor,它可以帮助您在检测过程中监控新打开的活动,查看下面的伪代码:

public void testOpenNextActivity() {
  // register next activity that need to be monitored.
  ActivityMonitor activityMonitor = getInstrumentation().addMonitor(NextActivity.class.getName(), null, false);

  // open current activity.
  MyActivity myActivity = getActivity();
  final Button button = (Button) myActivity.findViewById(com.company.R.id.open_next_activity);
  myActivity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
      // click button and open next activity.
      button.performClick();
    }
  });

  //Watch for the timeout
  //example values 5000 if in ms, or 5 if it's in seconds.
  NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5000);
  // next activity is opened and captured.
  assertNotNull(nextActivity);
  nextActivity .finish();
}

答案 1 :(得分:11)

NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5);

上述答案方法中提到的参数5是以毫秒为单位,而不是以秒为单位。因此,如果它是5,有时测试用例会失败因为在5毫秒内它无法加载下一个活动。所以5000或10000毫秒肯定会更好。在文档中,他们在几秒钟内给出了它但事实上它是以毫秒为单位。 所以下面的方法比上面的方法更好。

NextActivity nextActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 10000);

答案 2 :(得分:0)

对于ActivityUnitTestCase测试,您可以使用getStartedActivityIntent()来检查传递给startActivity()来电的意图。

protected Intent waitForStartedActivityIntent(int timeout) {
    long endTime = SystemClock.uptimeMillis() + timeout;
    while (SystemClock.uptimeMillis() <= endTime) {
        Intent intent = getStartedActivityIntent();
        if (intent != null) {
            return intent;
        }
    }
    return null;
}

信用:waitFor... logic was inspired by this answer

注意:使用ActivityUnitTestCase时,活动实际上并未启动;该调用由测试用例设置的模拟父进行吞噬。

答案 3 :(得分:0)

您可以使用ActivityMonitorInstrumentation来了解目标活动是否已启动,如下所示

public void testButton() {
     Instrumentation.ActivityMonitor activityMonitor = getInstrumentation()
            .addMonitor(TargetActivity.class.getName(), null, false);
    //button.performClick(); // Dont use this method
    TouchUtils.clickView(this, button);
    TargetActivity targetActivity = (TargetActivity) activityMonitor.waitForActivity(); // By using ActivityMonitor
    // TargetActivity targetActivity = (TargetActivity) activityMonitor.waitForActivityWithTimeout(5);// It also works
    // TargetActivity targetActivity = (TargetActivity) getInstrumentation().waitForMonitor(activityMonitor); // By using Instrumentation
   // TargetActivity targetActivity = (TargetActivity) getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 5); // It also works
    assertNotNull("Target Activity is not launched", targetActivity);
  }