我使用Robotium和ActivityInstrumentationTestCase2为Android运行UIAutomation。我有一个包含5个测试的测试套件。 有时我的测试随机崩溃,因为测试开始,一旦前一个测试尚未结束。 有办法避免这种情况吗?是否有可能在每次测试之前手动添加10秒的延迟,以摆脱这个可怕的烦人的错误?
修改
public class MyTest<T extends RoboActivity> extends ActivityInstrumentationTestCase2<T>
{
protected Solo solo;
@Override
protected void setUp() throws Exception {
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
protected void tearDown() throws Exception {
solo.finishOpenedActivities();
try {
solo.finalize();
}
catch (Throwable e) {
Assert.fail(e.getMessage()+ e.toString());
e.printStackTrace();
}
super.tearDown();
}
}
答案 0 :(得分:1)
也许这可行:
mSolo = new Solo(getInstrumentation(), getActivity());
mSolo.waitForActivity(AccountDetail.class);
似乎waitFor *方法正在管理比#34; sleep&#34;更好的方法。 http://robotium.googlecode.com/svn/doc/com/robotium/solo/Solo.html#waitForActivity(java.lang.Class,int)
答案 1 :(得分:0)
我的测试结构,拆解等略有不同,效果很好(见下文)。我不得不加入一个睡眠来解决一些非确定性的测试失败问题。
public class AccountDetailTest extends ActivityInstrumentationTestCase2<AccountDetail> {
private Solo solo;
public AccountDetailTest() {
super("com.bigcorp.breadmaker", AccountDetail.class);
}
@Override
public void setUp() {
solo = new Solo(getInstrumentation(), getActivity());
solo.sleep(500); //wait for activity to initialize
}
@SmallTest
public void testDummy() {
assertNotNull(solo);
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}