我可以获得仪器测试以终止并重新启动应用程序进程吗?
Can I get the instrumentation test to kill and restart the app process?
我需要测试应用程序从干净状态启动的用例 - 即在测试开始之前进程尚未 运行ning。从我从 logcat
中看到的情况来看,所有仪器测试 运行 都在一个进程 instance/session 下进行,因此在我的案例中测试的结果取决于它是否 运行s是否为#1。不应该这样——众所周知,单元测试(或仪器测试)应该是自主的。
有什么方法可以使用标准 Android 仪器测试工具和函数强制 TestRunner 在给定测试之前重新启动进程?如果没有,是否有黑客或第三方库可以帮助我实现这一目标?或者有什么方法可以明确地说 test X must 首先是 运行(最糟糕的选择但仍然如此)?
具体来说,除了 Activity 启动模式(例如 singleTop
)之外,我的测试还涉及通过意图和意图标志(例如 FLAG_ACTIVITY_CLEAR_TOP
)启动活动和过程的状态,在很大程度上决定了测试的结果。
假设您是 运行 Espresso,没有一种干净的方法可以做到这一点。这是因为 Espresso 与应用程序在同一进程中运行,因此终止应用程序将终止 Espresso。
问题是,您是否需要在 Application
中执行所有要执行的逻辑,或者是否可以将其移植到 Activity.onCreate()
?随着 Espresso 重新启动 Activity
是可行的。如果因为 global/singletons 而需要重新启动应用程序,则可能需要删除这些。如果无法做到这一点,您可以查看其他测试自动化框架,例如 Appium,它对此有一些支持。
我需要测试应用程序从干净状态启动的用例 - 即在测试开始之前进程尚未 运行ning。从我从 logcat
中看到的情况来看,所有仪器测试 运行 都在一个进程 instance/session 下进行,因此在我的案例中测试的结果取决于它是否 运行s是否为#1。不应该这样——众所周知,单元测试(或仪器测试)应该是自主的。
有什么方法可以使用标准 Android 仪器测试工具和函数强制 TestRunner 在给定测试之前重新启动进程?如果没有,是否有黑客或第三方库可以帮助我实现这一目标?或者有什么方法可以明确地说 test X must 首先是 运行(最糟糕的选择但仍然如此)?
具体来说,除了 Activity 启动模式(例如 singleTop
)之外,我的测试还涉及通过意图和意图标志(例如 FLAG_ACTIVITY_CLEAR_TOP
)启动活动和过程的状态,在很大程度上决定了测试的结果。
假设您是 运行 Espresso,没有一种干净的方法可以做到这一点。这是因为 Espresso 与应用程序在同一进程中运行,因此终止应用程序将终止 Espresso。
问题是,您是否需要在 Application
中执行所有要执行的逻辑,或者是否可以将其移植到 Activity.onCreate()
?随着 Espresso 重新启动 Activity
是可行的。如果因为 global/singletons 而需要重新启动应用程序,则可能需要删除这些。如果无法做到这一点,您可以查看其他测试自动化框架,例如 Appium,它对此有一些支持。