在使用Robotium的不同测试中,Activity不会重新启动

时间:2013-01-30 16:03:37

标签: android robotium

我正在测试我的应用程序使用Robotium登录,我遇到了一些问题。我有两种不同的用户类型,所以我做了3次测试。每种类型一个,另一个登录失败。如果我单独执行它们都会成功,但如果我运行所有测试用例它运行一个,执行tearDown(solo.finishOpenedActivities)并且它不会重新启动活动来执行其他测试。因此,在第二次测试中,当我要求使用EditText时,它说它不可用。

这是我的代码:

public class TestLogin extends ActivityInstrumentationTestCase2<MainActivity> {

private Solo solo;

public TestLogin() {
    super("com.truekke4.test", MainActivity.class);
}

@Override
protected void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
    super.setUp();
}

@Override
public void tearDown() throws Exception {
    getActivity().logout();
    solo.finishOpenedActivities();
    super.tearDown();
}

public void testUsuarioDesconocido() {
    solo.clearEditText(0);
    solo.enterText(0, "usuario desconocido");
    solo.assertCurrentActivity("Error", MainActivity.class);
    solo.clickOnButton("OK");
    solo.clickOnButton("OK");
    solo.assertCurrentActivity("Error", MainActivity.class);
}

public void testUsuario() {
    solo.clearEditText(0);
    solo.enterText(0, "usuario");
    solo.clickOnButton("OK");
    solo.assertCurrentActivity("Error", InicioUsuarioActivity.class);
}

public void testEmpresa() {
    solo.clearEditText(0);
    solo.enterText(0, "empresa");
    solo.clickOnButton("OK");
    solo.assertCurrentActivity("Error", InicioPymeActivity.class);
}

}

我必须手动重启活动吗?创建和意图以及startActivity(意图)?

我没有完成开放的活动?或者我必须完成活动,但在setUp()中重启/它。如何重新启动或创建活动以为Robotium制作可识别的内容?

帮助!

2 个答案:

答案 0 :(得分:3)

我认为您的问题是由于您从ActivityInstrumentationTestCase2覆盖setUp()方法而不是使用Robotium方法而引起的。在您的测试类中,Robotium查找具有签名public void setUp()的方法来配置其测试,这可能会让人感到困惑,因为它与可以覆盖的方法具有相同的名称。我不确定调用受保护的setUp的确切时间或频率,但我知道公共的是初始化solo的最佳位置,因为Robotium保证在每次单独测试之前调用它。尝试更改:

@Override
protected void setUp() throws Exception

为:

public void setUp() throws Exception

使用相同的方法体(但没有@Override注释)并查看是否允许您运行所有测试。

答案 1 :(得分:2)

你有代码:

@Override
protected void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
    super.setUp();
}

制作:

@Override
protected void setUp() throws Exception {
    super.setUp();
    solo = new Solo(getInstrumentation(), getActivity());
}

如果由于某种原因这种方法在拆解时没有正确清理,你可以调用setActivity(null)使getActicity()再次启动活动,或者自己手动调用launchActivity。