android - 我可以让仪器测试杀死并重新启动应用程序进程吗?

标签 android unit-testing android-lifecycle android-instrumentation

我需要测试一个应用程序从干净状态启动的用例 - 即在测试开始之前该进程尚未运行。从我看到的 logcat ,所有仪表测试都在一个流程实例/ session 下运行,因此在我的情况下,测试的结果取决于它是否作为#1 运行。不应该这样——众所周知,单元测试(或仪器测试)应该是自主的。

标准的 Android 仪器测试工具和功能有什么方法可以强制 TestRunner 在给定测试之前重新启动进程?如果没有,是否有黑客或第三方库可以帮助我实现这一目标?或者有什么办法我可以明确地说必须首先运行测试 X(最坏的选择,但仍然如此)?

具体来说,我的测试涉及通过 Intent 启动 Activity ,以及 Intent 标志(例如 FLAG_ACTIVITY_CLEAR_TOP )以及 Activity 启动模式(例如 singleTop )和流程状态,很大程度上决定了结果考试。

最佳答案

假设您正在使用 Espresso,没有一种干净的方法可以解决这个问题。这是因为 Espresso 与应用程序在同一进程中运行,因此终止应用程序将终止 Espresso。
问题是,你需要在你的Application 中执行的所有逻辑吗?或者可以移植到您的Activity.onCreate() ?随着 Espresso 重新启动 Activity是可行的。如果由于全局/单例需要重新启动应用程序,则可能需要删除这些。如果无法做到这一点,您可以查看其他测试自动化框架,例如 Appium这对此有一些支持。

关于android - 我可以让仪器测试杀死并重新启动应用程序进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32743078/

相关文章:

objective-c - 如何使用未作为参数传递给方法的 OCMock 模拟对象?

c# - 除了模拟方法之外,还调用模拟对象的实际方法

android - 迁移到androidx后没有 super 方法getLifecycle()

android - 能否画出 Fragment 及其父 FragmentActivity 的生命周期?

java - 从输入中找到路径为 'lib/arm64-v8a/libc++_shared.so' 的 2 个文件...-react native

java - 如何在 Android 的 BottomNavigationView 中设置填充项

tabbar - Android 中的自定义标签栏

android - ViewFlipper 动画和 minSdkVersion

c# - 多线程单元测试

android - API 25 (7.1.1) 更改了 Activity 生命周期