【问题标题】:How to test a method which start new activity?如何测试启动新活动的方法?
【发布时间】:2011-07-11 12:02:42
【问题描述】:

我在为我的应用编写测试用例时遇到问题。

首先,我可能会告诉您该应用程序是如何工作的。第一个屏幕是登录屏幕,成功登录后,将显示一个新活动并将用户凭据保存到 SharedPreferences 以便当活动再次启动且用户尚未注销时,应用程序将在第二个活动屏幕上启动。

我想通过登录测试第一个活动。我的主要问题是如何测试成功登录。如果登录名和密码有效,则创建新活动的意图并启动新活动。我的这个方法的代码如下所示:

public void testLoginValid() throws Throwable {
    for(index = 0; index < validEmails.length; index++) {
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                emailEditView.setText(validEmails[index]);
                passwordEditView.setText(defaultPassword);
                logIn.performClick();
            }
        });
        getInstrumentation().waitForIdleSync();
        //how to check if the activity started and how to go back?
    }
}

这是测试这种情况的好方法吗?问题是当登录有效并且它登录时,其余的测试用例挂起,因为活动活动已经改变,我不知道如何模拟它的完成是这样的。这个怎么做?或者也许我应该为每个登录编写方法(但我认为这不是一个好习惯......)。提前感谢您的帮助。

【问题讨论】:

    标签: android unit-testing testing junit


    【解决方案1】:

    如果您的任务是测试登录,您可以用一些模拟操作替换实际的新活动开始,并检查此操作是否开始。希望这会有所帮助。

    【讨论】:

    • 我对单元测试很陌生,尤其是在 Android 上,你能举一些例子或解释更多如何实现吗?
    • 没什么特别的解释,你说的是用户登录后通过intent启动一个activity。不用测试activity启动过程,你只需要测试登录。所以你应该用打印日志之类的东西替换你的活动开始代码。
    • 好的,我明白了。我只是认为还有其他方法,如果我想运行测试,我不必更改代码中的任何内容。
    • 您的代码中总会有不需要测试的东西,因此在测试时将它们注释掉可以节省大量时间。
    【解决方案2】:

    为了运行测试而对代码进行临时更改的问题在于,您不是在测试“真实”代码,您只能偶尔运行测试。更好的是进行设置,以便您可以随时自动运行所有测试。这就是测试驱动开发背后的理念。

    不幸的是,Android 让这件事变得比应有的困难得多 - 但情况正在改善:

    对于设备外测试,请查看Robolectric

    对于设备上的测试,请查看Borachio

    【讨论】:

    • 我想学习一些关于单元测试android的基本知识,也许比使用一些外部框架,但也许这不是最好的方法。会在我的空闲时间尝试一下。但我同意更改代码中的某些内容以运行测试并不是最好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多