假设你正在使用一个带有如下签名的类为 Android 平台构建一个测试用例:
public class AccountTest extends ActivityInstrumentationTestCase2<MainActivity> { ... }
假设我们有一个使用 Robotium 框架的测试方法:
public void testCreateAccount() {
solo.clickOnButton("Add Account");
solo.clickOnButton("Next");
...
}
测试用例完成后,检测的活动将迅速终止。 有没有办法在终止时保持活动状态,至少是为了确定下一步要做什么并编码接下来的几行?
之上,因此,它遵循 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();
}
有没有办法在终止时保持活动状态,至少是为了确定下一步要做什么并编码接下来的几行?
可能的解决方法包括:
- 完全覆盖 AccountTest 类中的 teardown(( 方法(它扩展了 ActivityInstrumentationTestCase2 类(,而无需调用 super.tearDown((;
- 创建自定义的 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
就不会结束。
希望对您有所帮助。