在测试用例之后,使检测的活动保持活动状态



假设你正在使用一个带有如下签名的类为 Android 平台构建一个测试用例:

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

假设我们有一个使用 Robotium 框架的测试方法:

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

测试用例完成后,检测的活动将迅速终止。 有没有办法在终止时保持活动状态,至少是为了确定下一步要做什么并编码接下来的几行?

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. 完全覆盖 AccountTest 类中的 teardown(( 方法(它扩展了 ActivityInstrumentationTestCase2 类(,而无需调用 super.tearDown((;
  2. 创建自定义的 ActivityInstrumentationTestCase3 类(扩展了 ActivityTestCase 类(以避免在 teardown(( 方法中完成活动。

无论哪种方法,您都应该仔细实现 teardown(( 方法以避免内存泄漏。

希望这有帮助。

事实证明,通过使用 Nativedriver 库很容易完成我想要的:

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

测试用例末尾省略driver.quit()可以使活动保持活动状态,这在最初开发测试用例时非常方便。

我有同样的问题。最后我用Sleep().

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

你可以把上面的代码放在任意的测试方法中,那么仪器Activity就不会结束。

希望对您有所帮助。

最新更新