假设您正在使用具有以下签名的类构建Android平台的测试用例:
public class AccountTest extends ActivityInstrumentationTestCase2<MainActivity> { ... }
假设我们使用Robotium框架有这样的测试方法:
public void testCreateAccount() {
solo.clickOnButton("Add Account");
solo.clickOnButton("Next");
...
}
当测试用例完成时,仪表活动会迅速被杀死。是否有任何方法可以在终止时保持活着,至少为了确定下一步要做什么以及编写下几行?
答案 0 :(得分:2)
Android JUnit Test构建于JUnit之上,因此,它遵循JUnit测试生命周期的基本规则:
当测试用例完成时,仪表活动会迅速被杀死。
请参阅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();
}
有没有办法让它在终止时保持活着,至少是为了确定你下一步要做什么以及编写接下来的几行?
可能的解决方法是:
在任何一种方法中,都应该仔细实现teardown()方法以避免内存泄漏。
希望这有帮助。
答案 1 :(得分:1)
事实证明,使用Nativedriver库很容易实现我想要的东西:
http://code.google.com/p/nativedriver/
在测试用例结束时省略driver.quit()
可以使活动保持活动状态,这在最初开发测试用例时非常方便。
答案 2 :(得分:0)
我有同样的问题。最后我使用Sleep().
while(true)
{
Thread.Sleep(1000);
// do other things when the main thread wake
}
您可以将上述代码放在任意测试方法中,然后仪器Activity
将不会结束。
希望它对你有所帮助。