我正在测试我的应用程序使用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制作可识别的内容?
帮助!
答案 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。