3

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

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

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

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

    ...
}

当测试用例完成时,被检测的活动被迅速杀死。有没有办法让它在终止时保持活力,至少是为了确定你接下来要做什么并编码接下来的几行?

4

3 回答 3

2

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

在任何一种方法中,您都应该仔细实现您的 teardown() 方法以避免内存泄漏。

希望这可以帮助。

于 2012-05-02T02:28:41.413 回答
1

事实证明,使用 Nativedriver 库很容易实现我想要的:

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

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

于 2012-06-06T19:21:22.657 回答
0

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

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

您可以将上述代码放入任意测试方法中,仪器Activity不会结束。

希望它可以帮助你。

于 2013-10-31T13:19:12.787 回答