Test 版本说明归档

AndroidX Test Espresso 3.1.1、Runner 1.1.1、Rules 1.1.1、Monitor 1.1.1、AndroidTestOrchestrator 1.1.1、Core 1.1.0、Truth 1.1.0 和 JUnit 1.1.0 (2018-12-13)

这是 AndroidX Test 1.1.0 的稳定版

  • Core
    • 使 ActivityScenario 支持会启动另一 Activity 的 Activity

AndroidX Test Espresso 3.1.1-beta01、Runner 1.1.1-beta01、Rules 1.1.1-beta01、Monitor 1.1.1-beta01、AndroidTestOrchestrator 1.1.1-beta01、Core 1.1.0-beta01、Truth 1.1.0-beta01 和 JUnit 1.1.0-beta01 (2018-12-06)

  • Core
    • 新增了 core-ktx kotlin 扩展工件!它包括适用于 Kotlin 的 ActivityScenario.launchActivity API
    • 新增了 ActivityScenario API,用于使用自定义 Intent 启动 Activity
    • 新增了 ActivityScenario API,用于接收 Activity 结果
    • 使 ActivityScenario 可关闭
  • Espresso
    • 修改了 withResourceNameMatcher 和 HumanReadables,使其与 API 28 兼容。
    • 更新了 ReplaceTextAction 的说明以包括 stringToBeSet
    • 在 Robolectric Paused Looper 模式下支持 Espresso。
  • JUnit
    • 新增了 ActivityScenarioRule API,用于在设置测试时自动启动 Activity,并在测试拆解后关闭 Activity
    • 新增了 junit-ktx kotlin 扩展工件!它包括适用于 Kotlin 的 ActivityScenarioRule API
  • Runner
    • 使 -e 软件包和 -e testFile 在接收软件包时行为保持一致
  • Truth
    • 添加了 bool、parcelable 和 parcelableAsType BundleSubject API

AndroidX Test Espresso 3.1.0、Runner 1.1.0、Rules 1.1.0、Monitor 1.1.0、AndroidTestOrchestrator 1.1.0、Core 1.0.0、Truth 1.0.0 和 JUnit 1.0.0 (2018-10-24)

  • 全部
    • 将 minSdkVersion 设置为 14,并将 targetSdkVersion 设置为 28
  • Espresso
    • 修复了 withContentDescription,以使用非字符串类型
    • 添加了对在 Robolectric 上使用 Espresso 的支持
    • 问题 72798625:启用 textAllCaps 后,无法使用 Espresso ViewMatchers.withText
    • 添加了对注入一系列动作事件的支持
  • Intents
    • 添加了测试版 API 以检索 Intent 列表,旨在与新增的 Truth 断言配合使用
  • Runner
    • 添加了对免安装应用的支持
    • 弃用了 androidx.test.runner.AndroidJUnit4 并改为使用 ndroidx.test.ext.junit.runners.AndroidJUnit4
  • Monitor
    • 弃用了 androidx.test.InstrumentationRegistry 并改为使用 androidx.test.platform.app.InstrumentationRegistry 和 androidx.test.core.app.ApplicationProvider
  • AndroidTestOrchestrator
    • 在同时传递“coverage”和“coverageFilePath”参数时,仅启用 Orchestrator coverage 处理过程。
    • 仅在设置了-debug 时等待调试程序,而非等待列出 ATO 测试用例。新增了 orchestratorDebug 标记,用于调试 Orchestrator 本身
  • Core
    • 新增了工件!它包括新的 API,支持同时在本地和设备端对以下项进行测试:
      • 检索上下文:ApplicationProvider
      • 控制 activity 生命周期:ActivityScenario(Beta 版)
      • MotionEvent、PackageInfo 的生成工具
      • Parceable 实用程序类
  • Truth
    • 新增了工件!它包括 Notification、Intent、Bundle、Parcelable 和 MotionEvent 的自定义 Truth 主题
  • JUnit
    • 新增了工件!它包括同时支持本地和设备端测试的 JUnit 运行程序类 androidx.test.ext.junit.runners.AndroidJUnit4。

Espresso 3.0.2-beta1、Runner 1.0.2-beta1、Rules 1.0.2-beta1、Monitor 1.0.2-beta1 和 AndroidTestOrchestrator 1.0.2-beta1 (2018-04-16)

  • Espresso
    • 重大 API 变更:
      • 问题 64062890 中引起我们注意的是,我们在公共 API 中使用了 Guava Optional。这是我们的严重疏忽。因此,在此版本中,我们对公共 API 做出了重大变更来解决此问题。我们围绕 Guava Optional 类引入了一个名为 EspressoOptional 的封装容器,该封装容器位于“android.support.test.espresso.util”命名空间下。使用泄漏的 Guava Optional API 的开发者需要更改其导入和引用,以在更新到此新版本的过程中使用 EspressoOptional。对于由此造成的不便,我们深表歉意。
    • onView () 和 onData () API 现在标记为 @CheckReturnValue 以防止出现错误
    • 修复了 espresso-core POM 文件,使其不提取“rules”依赖项,而会让 espresso-intents POM 提取该依赖项。对于开发者来说,这应该是一项 NoOp 更改,因为没有 espresso-core 就无法使用 espresso-intents。
    • 问题 65486414:Espresso 缺少 guava 依赖项
    • 问题 65576174:Espresso IdlingResourceRegistry.sync 导致第二次测试失败
    • 问题 65568629:Espresso.onIdle 未使用 IdlingRegistry
    • 问题 69333598:espresso 3.0.1 与 Android 库模块中的 play-services-auth:11.6.0 不兼容。
    • 问题 64062890:AdapterViewProtocol 接口公开了内部 Optional 类型
    • 问题 64091847:Espresso 3.0.0 不应该依赖于测试运行程序
    • 问题 73722050:espresso-contrib 3.0.2-alpha1 打包了 android.arch.{lifecycle/core} 类
  • Espresso-remote
    • 这是一个全新的工件。我们将 Espresso 的所有多进程功能从 espresso-core 工件中分离出来。这样更清晰,并且可以显著减少 espresso-core 的总大小和方法数。
  • Runner
    • 如果堆栈轨迹对于 Binder 事务而言太大,可以将其截断。由于 AJUR 需要通过 Binder IPC 将失败情况报告回 AM,因此我们需要确保不会超过 Binder 事务的大小限制,即每个进程 1MB。
    • 问题 65828576:在带有 @Ignore 的类中运行测试时,TestRequestBuilder 会崩溃
    • 问题 37057596:我们不处理 @BeforeClass 中的失败
  • Rules
    • 确保在生命周期更改后释放对被测 Activity 的引用。在测试期间,可以使用从 #getActivity () 获取的引用直接操纵 Activity。如果完成 Activity 并重新启动,则 #getActivity () 返回的引用现在始终指向 Activity 的当前实例。
    • 问题 64389280GrantPermissionRule 不提供 WRITE_EXTERNAL_STORAGE
    • 问题 37065965ActivityTestRule 在方向更改后会泄露 Activity
    • 问题 75254050ActivityTestRule 在配置更改期间不更新 Activity 实例
    • 问题 64464625:无法在 Activity 的 finish() 方法中执行界面任务
  • AndroidTestOrchestrator
    • 传递 -e coverage true -e coverageFilePath /sdcard/foo/ 标记以在给定位置生成 coverage 文件(该应用必须具有在给定位置进行写入的权限)。现在 coverage 文件的命名规则类似如下:com.foo.Class#method1.ec。请注意,仅当在隔离模式下运行时才支持此操作。此外,它还不能与 AndroidJUnitRunner 的 coverageFile 标记一起使用,因为生成的 coverage 文件会相互覆盖。
    • 如果希望 Orchestrator 在测试调用之间运行 pm clear context.getPackageName()pm clear targetContext.getPackageName() 命令,则传递 -e clearPackageData 标记。请注意,清除命令中的上下文是被测应用上下文。
    • 已修复 - 在目标中运行空测试(也就是说没有 @Test)时,测试结果与旧模式不同。
    • 问题 72758547:Test Orchestrator 会导致 Jacoco coverage 数据不完整,即只有上一次测试的运行数据
    • 问题 67916042:Android Test Orchestrator:执行在进程因 OutOfMemory 崩溃时停止
    • 问题 77752735:Orchestrator 因 TransactionTooLargeException 崩溃
    • 问题 77549481:Test Orchestrator 应在每次测试后运行“pm clear”

Espresso 3.0.2-alpha1、Runner 1.0.2-alpha1、Rules 1.0.2-alpha1 和 AndroidTestOrchestrator 1.0.2-alpha1 (2017-12-05)

  • Espresso

    • Intents 现在具有可调用的响应,以允许在捕获触发的 Intent 之后,返回 Instrumentation.ActivityResult 对象之前执行测试。
  • Runner

    • 为需要 MonitoringInstrumentation 但不需要运行测试和 JUnit 功能的用户拆分了 Monitor Maven 工件 com.android.support.test:monitor:<version>

      如果您使用 com.android.support.test:runner:<version>,那么一切都正常,因为 Gradle 会自动将 monitor 模块作为 runner 模块的依赖项纳入进来。

    • 添加了标记 newRunListenerOrderMode。为 true 时,用户定义的监听器会比默认监听器先运行。(我们希望这种行为最终会成为默认行为。)

    • 问题 65828576:在使用 @Ignore 注解的类中运行测试(独立运行,无需运行测试或 JUnit 功能)时,TestRequestBuilder 会崩溃。

  • AndroidTestOrchestrator

    • 现在,处理空测试的方式与非编排的 AndroidJUnitRunner 相同。
    • Orchestrator 现在可以处理非常大的 AndroidJUnitRunner 标准输出。

Espresso 3.0.1、Runner 1.0.1、Rules 1.0.1 和 AndroidTestOrchestrator 1.0.1 (2017-08-28)

  • Espresso

    • 添加了 IdlingPolicy 选项,以在将单步调试程序连接到虚拟机时抑制 onTimeout()
    • 问题 640246566424758664525881:除非用户通过添加 -e 类运行程序参数来加载特定的类,否则在类加载失败时将不会报告失败情况。
    • 问题 64877246:将缺少的类添加到源 JAR 文件。
  • Runner

    • 简化了 ShardingFilter 逻辑。
    • 问题 65025743@RequiresDevice 过滤器现在支持 FTL 模拟器。
  • AndroidTestOrchestrator

    • 不重复报告失败情况。现在,测试进程在失败后崩溃时,仅报告一次测试失败。
    • 修复了 Orchestrator 的 Javadoc。
    • 现在,如果远程进程崩溃,则测试会标记为未通过。
    • 现在可以处理忽略的测试用例。
    • 现在可以从脚注中排除忽略的测试用例以匹配旧结果。
    • 修复了运行时权限问题。现在,在 Android 7.0(API 级别 24)及更高版本系统上,测试报告会写入 SD 卡。

Espresso 3.0.0、Runner 1.0.0、Rules 1.0.0 和 AndroidTestOrchestrator 1.0.0(2017-07-25,公告

重大变更

  • 所有工件
    • 不再支持低于 15 级的 API 版本;不过,为了给用户留出时间升级,最低 SDK 版本仍指向 API 级别 9
  • Espresso

已知问题

  • AndroidTestOrchestrator
    • 目前不支持 -e numShards-e shardIndex 运行程序参数
    • 目前不支持参数化测试

新功能

  • Rules
  • AndroidTestOrchestrator
    • Android Test Orchestrator 提供了一种新的方法来收集和运行测试,其重点在于正确性和隔离。Orchestrator 是一个独立的插桩进程,为每个测试生成一个插桩运行程序进程并收集结果。
      • 应用崩溃会移除运行程序插桩,但不会移除 Orchestrator,这样测试套件就能继续运行
      • 需要安装 Orchestrator APK - 'com.android.support.test:orchestrator:1.0.0'
      • 版本 1.0 仅具有命令行界面;我们计划将其与 Android Studio 和 Firebase 测试实验室集成

问题修复

  • Espresso
    • 改进了根视图同步功能,以大幅提升稳定性
    • 修复了 IdlingResourceRegistry 损坏问题
    • 可以更好地同步 IdlingResource 对象
    • 问题 37132680:Espresso 不等待对话框创建完成就执行下一步操作
    • 问题 37103280:Espresso 应随附 ProGuard 使用方规则,这样使用方就无需自行添加这些规则
    • 问题 37094726:Espresso Intent 包含不必要的应用标签
    • 问题 37093953:Espresso - 无法检查 null/空错误文本
    • 问题 37071776espresso-core 嵌入 Guava 的 .pom 文件
    • 问题 187249release() 中的 NPE
    • 问题 37063389:将 Guava 和 espresso-web 作为 androidTest 依赖项会导致无法编译
    • 问题 37070533:在 Android 设计支持库中添加了对 NavigationView 的支持

其他显著变更

  • 二进制文件现在通过 Google Maven 发布
  • 缩减了 espresso-coreespresso-web JAR 文件的大小,而且嵌入的依赖项现在已应用 ProGuard
  • 现在,所有 .aar 文件都包含 ProGuard 规则
  • 在已发布的工件中添加 proguard_library.cfg 文件
  • Tapper 接口具有要实现的新版 sendTap()

外部贡献

Espresso 2.2.2 和 Runner/Rules 0.5(2016-02-22,静默发布)

新功能

  • espresso
    • 问题 194253:在 Android 支持设计库中添加了对 NavigationView 的支持
    • 添加了对启用的动画和转场效果的检查
    • 新增的 ViewMatcher API:withResourceName()

bug 修复

  • espresso
    • 问题 195331:espresso-core 嵌入 guava 的 pom 文件
    • 将计数空闲资源从 espresso-contrib 中移出
  • rules
    • 问题 187249Intents.release() 中的 NPE
  • runner
    • 问题 196066:AndroidJUnitRunner 中的 -e log true 参数不会绕过实际测试
    • 在运行程序的 onCreate() 中等待调试程序
    • 将所有支持的测试注解移出平台并移入 ATSL
    • 移除了关于没有 JSBridge 的堆栈轨迹转储
    • 修复了 AndroidAnnotatedBuilder

其他显著变更

  • 在 Beta 版中移除了 ActivityTestRuleUiThreadTestRuleIntentsTestRuleServiceTestRule
  • 添加了代码样式设置文件以统一代码格式

Espresso 2.2.1 和 Runner/Rules 0.4 (2015-09-15)

新功能

  • rules
    • 新增了 IntentsTestRule 构造函数以与 ActivityTestRule 完全兼容
  • runner
    • 专为 API 级别 15 和更低版本添加了多 dex 安装
    • 在类和软件包中添加了排除过滤器:
      • 运行除特定类测试以外的所有测试:adb shell am instrument -w -e notClass com.android.foo.FooTest
      • 运行除单个测试以外的所有测试:adb shell am instrument -w -e notClass com.android.foo.FooTest#testFoo
      • 运行除特定软件包以外的所有测试:adb shell am instrument -w -e notPackage com.android.foo.bar

外部贡献

  • espresso
    • 157911:在 EditText 对象上添加输入类型的视图匹配器
    • 157912:添加视图匹配器以匹配 EditText 对象上的错误文本
    • 150674:对应用了任意重力的抽屉式导航栏添加 DrawerActions 支持
    • 150744DrawerActions 不再泄露 parentListener
    • 153303:在“抽屉式导航栏是打开还是关闭”检查中指定了重力
    • 157910:添加 DrawerLayout 打开和关闭操作工厂

问题修复

  • espresso
    • ViewActions.closeSoftKeyboard() 现在可确保软键盘完全消失
    • 修复了 API 级别 21 及更高级别上 Espresso 的 Espresso.pressBack() 方法的同步问题
    • 修复了 API 级别 23 上键盘关闭动画的同步问题
  • rules
    • 修复了 API 级别 23 上 ServiceTestRule 的问题,必须始终使用显式 Intent 调用 startService()
  • runner
    • 修复了损坏的 gradle JaCoCo 支持
    • 修复了损坏的测试分片支持
    • 修复了 JUnit3 样式测试超时后测试运行程序中状态不一致的问题

其他显著变更

  • 改进了 Javadoc 修复和错误消息
  • 在使用方法过滤器时,会忽略 suite() 方法,但不会忽略 init 错误

Espresso 2.2/ATSL 0.3 (2015-06-09)

新功能

  • espresso-web 2.2
    • 新增了 WebView 支持
  • espresso-core 2.2
    • 迁移至 dagger v2
    • 迁移至 hamcrest v1.3
  • espresso-contrib 2.2
    • 无障碍检查
    • DrawerActions 重力支持
  • rules 0.3
    • DisableOnAndroidDebug 规则
  • runner 0.3
    • 从 JUnit v4.10 升级到 JUnit v4.12
    • 迁移至 hamcrest v1.3

bug 修复

  • 修复了 DrawerActions 泄露 ParentListener 的问题
  • Assumption Failure 现在被视为忽略的测试,而不是失败的测试
  • 通过 ExecutorService 修复了 MonitoringInstrumentation 泄露 Activity 实例的问题
  • 修复了孤立 Activity 陷入停滞状态的问题
  • 更新了 Until.scrollFinished(),以在没有生成滚动事件时返回 true。监控 UiObject2#setText() 中可能存在的 NPE。

Espresso 2.1、Test Runner/Rules 0.2 和 UIAutomator 2.1.0 (2015-04-21)

重大变更

  • 测试运行程序工件分成了两部分,名称从 com.android.support.test:testing-support-lib:0.1 变成了 com.android.support.test:runner:0.2com.android.support.test:rules:0.2

新功能

  • espresso-intents:一种类似于 Mockito 的 API,该 API 允许测试创建者验证输出的 Intent 并对其进行打桩处理,以此来执行封闭的 Activity 互动测试
    • IntentsTestRule:在功能界面测试中扩展 ActivityTestRule、进行初始化并发布 Espresso-Intent
  • espresso-core
    • ViewActions:支持在运行操作之前运行全局断言。这有助于在 Espresso 的基础上构建的其他框架在执行现有 Espresso 测试套件的同时验证视图层次结构的状态
    • ViewMatchers.withContentDescription() resId 过载
  • rules
    • ActivityTestRule:此规则提供单个 Activity 的功能测试
    • UiThreadRuleUiThreadTest 注解:此规则允许使用 UiThreadTest 注解的测试方法在应用的主线程(或界面线程)上执行
    • ServiceTestRule:此规则提供服务的功能测试
  • runner
    • ApplicationLifecycleCallback:用于监控应用生命周期事件的回调
    • 现在也可以使用 <meta-data> 标记在 Android 清单文件中指定所有运行程序参数
  • UIAutomator
    • UiDevice.dumpWindowHierarchy() 现在可以接受 FileOutputStream

bug 修复

  • espresso
    • 现在如果找不到光标所在列,光标匹配器会返回 false,以便 Hamcrest 可以继续处理下一个光标
    • 不再出现带有 PreferenceMatchers withTitleNullPointerException
    • 注销空闲资源不会再使 Espresso 认为我们的空闲资源忙碌
    • 更新了 Espresso Contrib 使用的支持注解版本
  • runner
    • AndroidJUnit4 现在使用 Failing Assumption 跳过测试
  • UIAutomator
    • 运行观察器以预防出现 StaleObjectException

其他显著变更

  • 添加了更清楚明白的错误消息以在无法使用非拉丁字符串键入文本时显示

UIAutomator 2.0 (2015-03-12)

UIAutomator 现在以 Android 插桩为基础,您可以使用 ./gradlew connectedCheck 命令来构建和运行测试。

Espresso 版本 2.0 和 Test Runner 0.1(发布日期:2014-12-19)

重大变更

  • Espresso 已迁移到新的命名空间(从 android.support.test.espresso 迁移到 android.support.test.espresso
  • Espresso 工件已重新命名
    • espresso-1.1.jar 现在为 espresso-core-release-2.0.jar
    • IdlingResource 接口已移到单独的库中:espresso-idling-resource-release-2.0.jar
    • CountingIdlingResource 现在位于 espresso-contrib-release-2.0.jar 中(和往常一样)
  • 从公共 API 中移除了 Optional(一个 guava 依赖项)以支持重新打包 guava 依赖项并避免 DEX 冲突(开发难点的主要根源)。受影响的方法包括:
    • ViewAssertion.check()
    • HumanReadables.getViewHierarchyErrorMessage()

新功能

  • 操作
    • ViewActions
      • replaceText()
      • openLink()
      • 上下滑动
    • espresso-contrib
      • RecyclerViewActions:处理与 RecyclerViews 的互动
      • PickerActions:处理与 DateTime 选择器的互动
  • 匹配器
    • RootMatchers
      • isPlatformPopup()
    • ViewMatchers
      • isJavascriptEnabled()
      • withSpinnerText()
      • withHint()
      • isSelected()
      • hasLinks()
    • LayoutMatchers:用于与国际化相关的布局测试的匹配器
    • CursorMatchersCursor 对象的匹配器集合
  • 断言
    • PositionAssertions,包括 isLeftOf()isAbove()ViewAssertions 的集合,用于检查元素在屏幕上的相对位置
    • LayoutAssertions:用于与国际化相关的布局测试的断言
  • 测试应用:许多新的 Activity/测试示例
  • 其他
    • Espresso.unregisterIdlingResources()Espresso.getIdlingResources():可更灵活地与 IdlingResources 配合使用
    • ViewInteraction.withFailureHandler():允许从 onView() 替换失败处理程序
    • onData() 支持由 CursorAdapters 提供支持的 AdapterViews

bug 修复

  • ViewMatchers.isDisplayed() 匹配占据整个屏幕但显示部分不低于 90% 的视图
  • DrawerActions.openDrawer() 执行滑动操作调用不再导致 IdlingResourceTimeoutException

其他显著变更

  • 从使用 Maven 进行编译切换到使用 Gradle 进行编译
  • 移除了 Espresso 依赖项(Guava、Dagger 和 Hamcrest)以避免 DEX 冲突
  • 改为在注册和注销空闲资源时返回成功或失败
  • Lollipop 支持:将 message.recycle() 置于接口之后,以说明与版本相关的变更
  • 将目标 SDK 级别切换为 21,这主要影响测试应用

版本 1.1(发布日期:2014 年 1 月 8 日)

Espresso

  • 新增了 swipeLeftswipeRight ViewActions
  • 多窗口支持:一项高级功能,方便您选择 Espresso 运行操作的目标窗口
  • 对于 TypeTextAction 的改进:允许在预先聚焦的视图中输入文本,以便于附加文本
  • 修复了大量问题

Espresso Contrib 库

  • 此新库包含作为 Espresso 的补充但不属于核心库的功能
  • 新增了用于在 DrawerLayout 上运行的 DrawerActions:依赖于 Android 支持库,因此未将其纳入核心 Espresso 库

测试示例

  • 这些测试已重新定位,与测试应用位于同一软件包中
  • 修复了 Maven POM 以移除重复的 guava 依赖项,因此 mvn install 现在应可以正常工作