【问题标题】:Can I get the instrumentation test to kill and restart the app process?我可以让仪器测试杀死并重新启动应用程序进程吗?
【发布时间】:2015-12-20 23:28:26
【问题描述】:

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

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

具体来说,我的测试涉及通过意图启动活动,以及意图标志(例如FLAG_ACTIVITY_CLEAR_TOP)以及活动启动模式(例如singleTop)和进程状态,非常决定测试的结果。

【问题讨论】:

  • 你找到解决办法了吗?
  • 您想从 espresso 测试中重新启动应用程序吗?
  • 在每次测试中杀死并重新启动应用程序进程是否是一种解决方案?

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


【解决方案1】:

假设您正在使用 Espresso,没有一种干净的方法可以解决这个问题。这是因为 Espresso 与应用程序在同一进程中运行,因此终止应用程序将终止 Espresso。

问题是,您是否需要在您的Application 中执行所有逻辑,或者是否可以将其移植到您的Activity.onCreate()?使用 Espresso 重新启动 Activity 是可行的。如果由于全局/单例需要重新启动应用程序,则可能需要删除这些。如果无法做到这一点,您可以查看其他测试自动化框架,例如 Appium,它对此提供了一些支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多