android - 如何在 android 仪器测试中停止和重新启动 Activity ?

标签 android testing android-testing

我正在尝试编写一个停止(onPause(),然后是 onStop())并重新启动当前 Activity 的 Android Activity 检测测试。我试过了

activity.finish();
activity = getActivity();

...但这似乎无法正常工作。

测试的目标是断言表单数据在 onPause() 方法期间存储并在 onStart() 方法期间重新读取。它在手动执行时有效,但测试失败,由此我得出结论 activity.finish() 似乎是停止和重新启动 Activity 的错误方法。


编辑:我的主要问题似乎是同步问题。重新启动 Activity 后,测试运行程序没有等待所有事件处理程序完成。以下行暂停测试执行,直到 Activity 空闲:

getInstrumentation().waitForIdleSync()

除此之外,请查看已接受的答案以获取有关生命周期的更多有值(value)信息。

最佳答案

通过调用(或触发屏幕方向更改):

activity.finish(); // old activity instance is destroyed and shut down.
activity = getActivity(); // new activity instance is launched and created.

使 Activity 经历完整的娱乐生命周期:

onPause() -> onStop() -> onDestroy() -> onCreate()

你需要的是:

onPause() -> onStop() -> onRestart()

我暴露了Instrumentation API最近发现了很多有趣的activity生命周期触发方法callActivityOnXXX(),下面一行代码就可以解决问题了:

MyActivity myActivity = getActivity();
// make activity falling into restart phase:
getInstrumentation().callActivityOnRestart(myActivity);

引用官方开发指南的 Activity 生命周期图: enter image description here

关于android - 如何在 android 仪器测试中停止和重新启动 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296110/

相关文章:

android - 如何在 Android 测试项目中获取对 ActionBar MenuItem 的引用

java - 收缩调试多 Dex 组件;无法读取目录/allclasses.jar

android - 在 Activity 之上创建一个透明对话框

没有堆栈跟踪的 Android "Shutting down VM"

security - WebInspect 生产系统

gradle - 我可以在同一个 Android 项目中同时使用 Junit 3 和 Junit 4 吗?

java - 如何重新创建或刷新 fragment

node.js - Api 单元测试

unit-testing - 如何测试 Clojure 中抛出的异常?

android - 如何在单元测试中使用协程测试 livedata