Android测试 - ActivityInstrumentationTestCase2的问题?

时间:2011-12-13 19:34:00

标签: android ui-automation robotium

我使用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();
    }
}

2 个答案:

答案 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();
}
}