什么是 Android 测试协调器?

2024-05-14

谷歌最近发布了Android测试支持库1.0。读完后overview https://android-developers.googleblog.com/2017/07/android-testing-support-library-10-is.html,我对 Android Test Orchestrator 有点困惑。

It said

通常,AndroidJUnitRunner 在同一检测进程中运行所有测试,这可能会导致许多问题。

您能解释一下使用相同的仪器流程会导致哪些类型的问题吗?

如果一个测试崩溃,它会阻止测试套件的其余部分运行

根据我的经验,一次测试崩溃不会阻止其他测试用例的运行。请指出我在这里误解了什么?

并从Android 测试 Orchestrator 开发人员指南 https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator,

为了完整起见,Android Test Orchestrator 在每次测试后都会运行 pm clear。

因此 Android Test Orchestrator 将运行pm 清除 [test_package_name]每次测试后,对吗?

通过我的测试,pm 清除 [app_package_name]每次测试后不会执行。这意味着被测应用程序的数据不会被清除。因此测试用例可能仍然相互依赖。例如:

  • 测试用例 A 存储 SharedPreference 键值
  • 在测试用例 A 之后运行的测试用例 B 可以读取测试用例 A 存储的值

总的来说,经过一番尝试,我没有发现Android Test Orchestrator有任何优势。有人可以帮助解决我的困惑吗?谢谢。


经过对这个问题的一些研究后,我可以提供以下答案:

通常,AndroidJUnitRunner 在同一检测进程中运行所有测试,这可能会导致许多问题。

如前所述,AndroidJUnitRunner 在相同的检测进程上运行,因此基本上您的测试是全状态运行的,如果您的测试对进程状态有某种依赖性,这可能会造成严重破坏。在 Android 测试编排器中,每个测试都在自己的进程中运行,因此依赖性不是问题。

如果一个测试崩溃,它会阻止测试套件的其余部分运行

这里讨论的崩溃是进程的崩溃,而不是活动/应用程序的崩溃。您可以通过插入一个测试来测试这一点System.exit(0);通常,这将停止整个测试运行,而在 Android 测试协调器中测试将按预期继续。

为了完整起见,Android Test Orchestrator 在每次测试后都会运行 pm clear。

这是谷歌的疏忽,已从官方文档 https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator可以观察到here https://groups.google.com/forum/#!topic/android-testing-support-library/VUT97mrwWQY.

基本上,使用 Android 测试编排器的优点在于每个测试都有单独的流程,从而提高稳定性并确保测试的完整执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是 Android 测试协调器? 的相关文章

  • 在 JellyBean 上使用 LogCat

    我有一个非常随机发生的错误 所以我依赖LogCat我从 Play 商店购买的监控应用程序 以查看发生时设备上抛出的异常 自从使用 Jelly Bean 以来 我没有看到任何日志记录 我读过 使用 Jelly Bean 应用程序只能看到Log
  • ProGuard SimException

    经过大约 4 个小时的随机尝试 我正在尝试让 ProGuard 正常工作 尝试让这个令人惊叹的软件正常工作 我的项目使用 LibGDX 和 KryoNet 这是我当前的 ProGuard 配置 verbose dontobfuscate d
  • “_Smi”不是“bool”类型的子类型 - Flutter MethodChannel

    收到这个奇怪的错误 似乎 MethodChannel 正在转换为 int 而不是 bool 06 07 00 16 26 589 3678 4993 E flutter ERROR topaz lib tonic logging dart
  • 如何设置自定义谷歌地图标记的背景图像?

    我有一个用于 Google 标记的自定义图像 但我必须在其背景上设置另一个图像 是否可以设置地图标记的背景图像 是的你可以 试试这个所以问题如何使用 Android 地图 API v2 创建自定义形状的位图标记 https stackove
  • 更换电池后广播接收器会导致某些手机上的应用程序崩溃

    每当手机插入电源时 我都会激活我的应用程序 这是我的清单
  • 在 Android Studio 中设置 Http 代理

    我已经阅读了多个类似的问题和文档 但我无法解决我的机器所在的公司防火墙的问题 我收到的错误是 无法刷新 Gradle 项目 未知主机 services gradle org 我所阅读和理解的所有内容都让我相信这是一个 http 代理问题 我
  • 按下按钮时清除编辑文本焦点并隐藏键盘

    我正在制作一个带有编辑文本和按钮的应用程序 当我在 edittext 中输入内容然后单击按钮时 我希望键盘和焦点在 edittext 上消失 但我似乎无法做到这一点 我在 XML 中插入了这两行代码 android focusable tr
  • android以编程方式打开电池设置

    我正在寻找一种从 Android 应用程序打开电池设置屏幕的方法 到目前为止我发现了两个意图 Intent ACTION POWER USAGE SUMMARY Settings ACTION BATTERY SAVER SETTINGS
  • 当您处于飞行模式并退出飞行模式时,我只收到最后一条 FCM 推送通知?

    我只在退出飞行模式后收到最后的推送通知 FCM 但是 如果我的应用程序位于前台 一旦我离开飞行模式 我将收到所有推送通知 我已将 FCM 消息类型实现为通知消息 笔记 无法将 FCM 消息类型实现为数据消息 因为 APNS 只接受我的 iO
  • Android Fitness API 未从可穿戴传感器读取数据

    我一直在阅读有关 Google Fit API 的内容 特别是传感器 API https developers google com fit android sensors https developers google com fit a
  • 将多个视频文件合并到一个文件中

    我有多个以相同帧速率和分辨率录制的视频 我想将两个视频合并为一个视频 因此结果文件将是大视频 我正在使用 MP4 解析器 api 并使用下面的代码 Movie countVideo new MovieCreator build Channe
  • 在 Facebook 上分享文本和 URL

    我想分享一条消息 例如 查看图片http someUrl com http someUrl com从应用程序共享ABCapp 用户必须能够选择任何已安装的应用程序进行共享 我正在使用以下代码 Intent intent new Intent
  • SlidingPaneLayout setCoveredFadeColor () 和 setSliderFadeColor()

    我正在使用SlidingPaneLayout并希望在滑块右窗格打开时在左窗格上设置灰色渐变颜色 在右窗格关闭且左窗格完全可见时在左窗格上设置透明渐变颜色 我知道这是默认行为SlidingPaneLayout 但使用默认实现时 我在横向模式下
  • 使用远程数据编写 Android、iPad、iPhone 客户端的技术

    我需要探索世界 你写了一个杀手级应用程序 但你有 Android iPhone iPad 客户端吗 我的问题是 1 向这些设备发送数据的最佳方式是什么 按照建议进行肥皂和休息here https stackoverflow com ques
  • Android Market 多个 APK...不同的 CPU 架构怎么样?

    所以我想我现在可以使用针对目标 CPU 架构的不同 NDK 编译库来上传我的应用程序 但似乎这是不可能的 有人知道如何将不同的 APK 上传到 Android Market 每个 APK 都包含专门为不同 CPU 架构编译的库吗 我还没有尝
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 为 REST API 编写单元测试的最佳方法是什么?

    在为 API 包装器编写单元测试时 我应该对 REST API 端点进行真正的调用 还是应该使用 mocl 响应来模拟成功和错误的调用 单元测试意味着只测试你的unit API 包装器 仅此而已 因此 不幸的是 您应该模拟整个 API 另一
  • 在 Android 中使用 Fragment 时处理后按

    我在应用程序中使用 Android 滑动菜单和导航抽屉 并且在应用程序中使用片段而不是活动 当我打开抽屉时 单击一个项目会出现一个片段 我使用以下代码从一个片段移动到另一个片段 Fragment fragment null fragment
  • 如果没有按钮,Espresso 不会记录任何意图

    我正在尝试编写一个测试来验证使用浓缩咖啡启动的意图 问题是有意的 不记录任何意图 我有这个测试 Test public void shoulddosomething startActivity intended hasComponent h
  • 水平 RecyclerView 顶部的滚动条

    我正在做简单的演示卧式RecyclerView 我想与回收视图一起显示滚动条 所以我添加了android scrollbars horizontal and android scrollbarSize 5dp 在 XML 中 我可以获得滚动

随机推荐