如何在Robotium中检查应用程序已完成?

时间:2013-03-14 19:14:14

标签: android testing robotium android-lifecycle

我正在尝试使用Robotium创建一个测试方法来检查Android应用程序是否在单击按钮后完成(在代码中,当用户点击它时,会调用finish())。

public void test_onclickExit_finish() {
    String buttonText = resources.getString(R.string.exit);
    Button exitButton = solo.getButton(buttonText, true);
    solo.clickOnView(exitButton);
    // check here that the app has finished
    // wait for the activity to finish?
    assertTrue(solo.getCurrentActivity() == null);
}

但是这个测试失败了。我不知道如何指示测试等待活动结束。此外,我不确定使用getCurrentActivity()是否是检查应用程序是否已完成的好方法。

如何检查应用程序/活动是否已完成?

感谢。

3 个答案:

答案 0 :(得分:4)

如果是您的主要活动,请使用:

assertTrue(solo.getCurrentActivity().isFinishing());

答案 1 :(得分:3)

这个问题很老,但也许我的解决方案可以帮助某人。

我找到了一种在使用Robotium时等待/检测活动是否完成的方法。

  • 创建一个条件来检测活动根视图何时从窗口中分离:(我在我的示例中使用了一个帮助方法)

    public static Condition activityWillClose(final Activity activity) {
    
        return new Condition() {
            boolean _detached = false;
    
            { // constructor
                View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content);
                rootView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
                    @Override
                    public void onViewAttachedToWindow(View view) {
                    }
    
                    @Override
                    public void onViewDetachedFromWindow(View view) {
                        _detached = true;
                    }
                });
            }
    
            @Override
            public boolean isSatisfied() {
                return _detached;
            }
        };
    }
    
  • 等待测试中的条件:

    solo.clickOnView(solo.getView(R.id.exitButton));
    
    Assert.assertTrue("should finish activity",
            solo.waitForCondition(activityWillClose(solo.getCurrentActivity()), 2000)
    );
    

答案 2 :(得分:2)

应用程序和工具在同一个过程中运行,如果您完成了应用程序,则无法在仪器中执行任何操作。它失败了,因为仪器也被杀了,你试图做更多的事情。没有办法检查你想用robotium做什么。