2

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

}

我必须手动重新启动活动?Create and Intent 和 startActivity(intent)?

我不必完成已打开的活动?或者我必须完成活动,但在 setUp() 中重新启动它们/它。如何重新启动或创建活动以使 Robotium 可识别?

帮助!

4

2 回答 2

3

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

@Override
protected void setUp() throws Exception

至:

public void setUp() throws Exception

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

于 2013-01-31T15:07:18.173 回答
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。

于 2013-01-31T07:54:55.247 回答