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

Android 如何在Robotium中检查应用程序是否已完成?,android,testing,robotium,android-lifecycle,Android,Testing,Robotium,Android Lifecycle,我正在尝试使用Robotium创建一个测试方法,以检查Android应用程序在单击按钮后是否完成(在代码中,当用户点击按钮时,会调用finish()) 但这项测试失败了。我不知道如何指示测试等待活动完成。另外,我不确定使用getCurrentActivity()是否是检查应用程序是否已完成的好方法 如何检查应用程序/活动是否已完成 谢谢。应用程序和检测正在同一进程中运行,如果您完成了应用程序,您将无法在检测中执行更多操作。它失败了,因为仪器也被杀死了,而您试图做更多的事情。没有办法检查您想用ro

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

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

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


谢谢。

应用程序和检测正在同一进程中运行,如果您完成了应用程序,您将无法在检测中执行更多操作。它失败了,因为仪器也被杀死了,而您试图做更多的事情。没有办法检查您想用robotium做什么。

如果这是您的主要活动,请使用以下方法:

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

这个问题由来已久,但也许我的解决方案可以帮助别人

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

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

  • 等待测试中的条件:

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

你所说的完成是什么意思?!没有活动在运行?没有服务在运行?没有进程运行?通常,退出按钮在android中不是一个东西,为什么要退出某个东西?只要把它放在后台,如果需要的话,操作系统就会关闭它,并且假设你用保存状态正确编程,当他们重新打开时,它会弹出打开。1。断言主要是在开发和维护期间使用的,因此此检查可能是针对生产代码进行编译的,因此没有任何效果,2。此检查不足以等待活动完成,也不足以检查活动是否已完成。我不理解该注释。assertTrue在测试代码中,不是吗?调用solo.getCurrentActivity()是不可靠的,因为在调用它时它可能已经完成了。我认为@Filipe的答案可能更可靠。
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)
);