在Android活动测试中,如何完成我的主要活动开始的另一项活动?

时间:2012-07-09 10:51:08

标签: android testing android-activity

我正在为我们用3个按钮编写的活动编写活动测试。其中2个按钮开始其他活动。

我可以编写一个模拟按钮按下的测试,然后检查所需的活动是否正在运行,但我无法从第二个活动中退回。第二个活动停留在前面,并阻止其他测试(假设第一个活动正在运行)正常工作。他们只是冻结了。

我有第一个活动的引用,但这是我需要的第二个活动,我猜是调用finish()。有没有办法做到这一点?

编辑:我在这个要点中添加了一些实际的源代码来说明我的问题:https://gist.github.com/3076103

具体是关于测试活动。在生产代码中一切都很好。

4 个答案:

答案 0 :(得分:2)

您应该使用http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html来获取第二个活动的引用,或者您可以阻止第二个活动被启动(仍然保证您启动第二个活动的调用已达到框架之前)

答案 1 :(得分:0)

您需要一种方法让您的活动相互沟通,以便一项活动可以告诉对方完成。有几种方法可以实现这一目标。一种方法是在我的应用程序中创建服务;我的“第二”活动将连接到此服务以注册接收消息的方式,我的主要活动将连接以提供它们。

答案 2 :(得分:0)

在Activity1中添加以下内容以启动Activity2

Intent myIntent = new Intent(view.getContext(), Activity2.class);
startActivityForResult(myIntent, 0);

在Activity2中添加以下内容以启动Activity1并完成Activity2

Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();

有关详情:http://www.warriorpoint.com/blog/2009/05/24/android-how-to-switch-between-activities/

答案 3 :(得分:0)

  • 如果您使用startActivityForResult启动活动,则可以使用finishActivity(int requestCode)关闭来自父级的活动。

    开始活动:
    startActivityForResult(new Intent(...), 123123 /*requestCode*/);

    如果您想完成该活动(来自来电者),请使用:
    finishActivity(123123 /*requestCode*/)

  • 还有一种方法可以找到儿童活动是否已经完成。但是,只有在子活动为自己调用finish()时才能跟踪此信息。要接收来自孩子的子完成请求,您需要覆盖父活动中的finishFromChild()方法。