测试版发行说明存档

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 的稳定版发布。

  • 核心
    • 使 ActivityScenario 支持启动另一个活动的活动

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-ktx kotlin 扩展工件!包含 Kotlin 友好的 ActivityScenario.launchActivity API
    • 使用自定义意图启动活动的新的 ActivityScenario API
    • 接收 Activity 结果的新的 ActivityScenario API
    • 使 ActivityScenario 可关闭
  • Espresso
    • 修改 withResourceNameMatcher 和 HumanReadables 以使其与 API 28 兼容。
    • 更新 ReplaceTextAction 的描述以包含 stringToBeSet
    • 在 Robolectric 暂停的循环模式中支持 Espresso。
  • JUnit
    • 新的 ActivityScenarioRule API,用于在测试设置和拆卸时自动启动和关闭 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 不起作用
    • 添加支持以注入一系列运动事件
  • 意图
    • 添加用于检索意图列表的 beta API。用于与新的 Truth 断言一起使用
  • Runner
    • 添加对即时应用程序的支持
    • 弃用 androidx.test.runner.AndroidJUnit4 并用 androidx.test.ext.junit.runners.AndroidJUnit4 替换
  • 监控
    • 弃用 androidx.test.InstrumentationRegistry 并用 androidx.test.platform.app.InstrumentationRegistry 和 androidx.test.core.app.ApplicationProvider 替换
  • AndroidTestOrchestrator
    • 仅当传递了“coverage”和“coverageFilePath”参数时才启用 orchestrator 覆盖率处理。
    • 仅在设置 -debug 但不列出 ATO 测试用例时等待调试器。为调试 orchestrator 本身添加了一个新的 orchestratorDebug 标志
  • 核心
    • 新的工件!包含支持本地和设备上测试的新 API
      • 检索上下文:ApplicationProvider
      • 控制活动生命周期:ActivityScenario(测试版)
      • MotionEvent、PackageInfo 的构建器
      • 可打包工具类的实用程序类
  • 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 文件,使其不再引入“规则”依赖项,而是让 espresso-intents POM 引入它。对于开发人员来说,这应该是一个 NoOp 更改,因为 espresso-intents 无法在没有 espresso-core 的情况下使用。
    • 问题 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
    • 如果堆栈跟踪过大,无法进行绑定器事务,则截断堆栈跟踪。由于 AJUR 需要通过绑定器 IPC 将错误报告回 AM,因此我们需要确保不会超过绑定器事务限制 - 每个进程 1MB。
    • 问题 65828576:在带有 @Ignore 的类中运行测试时,TestRequestBuilder 崩溃
    • 问题 37057596:我们没有处理 @BeforeClass 中的错误
  • 规则
    • 确保在生命周期更改后释放对测试中活动的引用。在测试期间,现在可以使用从 #getActivity() 获取的引用直接操作活动。如果活动已完成并重新启动,则 #getActivity() 返回的引用现在始终指向活动的当前实例。
    • 问题 64389280GrantPermissionRule 不提供 WRITE_EXTERNAL_STORAGE
    • 问题 37065965ActivityTestRule 在方向更改后泄漏活动
    • 问题 75254050ActivityTestRule 在配置更改期间没有更新活动实例
    • 问题 64464625:无法在 Activity 的 finish() 方法中执行 UI 操作
  • AndroidTestOrchestrator
    • -e coverage true -e coverageFilePath /sdcard/foo/ 标志传递给在给定位置生成覆盖率文件(应用程序必须有权写入给定位置)。覆盖率文件命名约定现在如下所示:com.foo.Class#method1.ec。请注意,这仅在以隔离模式运行时受支持。此外,它不能与 AndroidJUnitRunner 的 coverageFile 标志一起使用。因为生成的覆盖率文件会互相覆盖。
    • 如果希望编排程序在测试调用之间运行 pm clear context.getPackageName()pm clear targetContext.getPackageName() 命令,则传递 -e clearPackageData 标志。请注意,清除命令中的上下文是测试中应用程序的上下文。
    • 修复 - 运行空测试时,即目标中没有 @Test,测试结果与传统模式不同。
    • 问题 72758547:测试编排程序导致 Jacoco 覆盖率数据不完整,只包含最后一次测试运行的数据
    • 问题 67916042:Android 测试编排程序:由于内存不足导致进程崩溃,执行停止
    • 问题 77752735:编排程序因 TransactionTooLargeException 崩溃
    • 问题 77549481:测试编排程序应该在每次测试后运行“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 现在具有可调用的响应,允许测试在捕获已触发的意图后但在返回 Instrumentation.ActivityResult 对象之前执行。
  • Runner

    • 分离监控 Maven 构件 com.android.support.test:monitor:<version>,供需要 MonitoringInstrumentation 但不需要测试运行和 JUnit 功能的用户使用。

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

    • 添加了标志 newRunListenerOrderMode。当 true 时,用户定义的监听器在默认监听器之前运行。(我们预计此行为最终将成为默认行为。)

    • 问题 65828576TestRequestBuilder 在使用 @Ignore 注释的类(独立,没有测试运行或 JUnit 功能)中运行测试时崩溃。

  • AndroidTestOrchestrator

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

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

  • Espresso

    • 添加了一个 IdlingPolicy 选项,用于在将步骤调试器附加到 VM 时抑制 onTimeout()
    • 问题 640246566424758664525881:除非用户通过包含 -e 类运行程序参数来加载特定类,否则不要报告类加载失败的错误。
    • 问题 64877246:将缺少的类添加到源 JAR 文件。
  • Runner

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

    • 不要重复报告错误。当测试进程在失败后崩溃时,现在只为测试报告一个错误。
    • 修复了编排程序的 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 运行程序参数当前不受支持
    • 参数化测试 当前不受支持

新功能

  • 规则
  • AndroidTestOrchestrator
    • Android Test Orchestrator 提供了一种新的收集和运行测试的方法,重点在于正确性和隔离。Orchestrator 是一个独立的 Instrumentation 进程,为每个测试生成一个 Instrumentation 运行程序进程,并收集结果。
      • 应用程序崩溃会使运行程序 Instrumentation 停止,但不会使 Orchestrator 停止,从而使您的测试套件可以继续进行
      • 需要安装 Orchestrator APK – 'com.android.support.test:orchestrator:1.0.0'
      • 版本 1.0 仅具有命令行界面;计划将与 Android Studio 和 Firebase Test Labs 集成

错误修复

  • Espresso
    • 改进了根视图同步,以显著减少不稳定性
    • 修复了 IdlingResourceRegistry 的损坏
    • 针对 IdlingResource 对象进行了更好的同步
    • 问题 37132680:Espresso 在执行下一个操作之前不会等待对话框创建完成
    • 问题 37103280:Espresso 应附带 ProGuard 消费者规则,以便消费者无需添加这些规则
    • 问题 37094726:Espresso Intents 包含不必要的应用程序标签
    • 问题 37093953:Espresso:没有可用的空/空错误文本检查
    • 问题 37071776espresso-core 嵌入 Guava 的 .pom 文件
    • 问题 37062612release() 中出现 NPE
    • 问题 37063389:将 Guava 和 espresso-web 作为 androidTest 依赖项无法编译
    • 问题 37070533:添加对 NavigationView 的支持,在 Android Design Support Library

其他值得注意的更改

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

外部贡献

Espresso 2.2.2、Runner/Rules 0.5(2016 年 2 月 22 日,静默发布)

新功能

  • espresso
    • 问题 194253:添加对 android 支持设计库中 NavigationView 的支持
    • 添加了对启用动画和过渡的检查
    • 新的 ViewMatcher API:withResourceName()

错误修复

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

其他值得注意的更改

  • ActivityTestRuleUiThreadTestRuleIntentsTestRuleServiceTestRule 现已退出测试版
  • 添加代码样式设置文件以统一代码格式

Espresso 2.2.1、Runner/Rules 0.4(2015 年 9 月 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() 现在确保软键盘已完全消失
    • 修复了 Espresso 的 Espresso.pressBack() 方法在 API 级别 21 及更高版本上的同步问题
    • 修复了 API 级别 23 上的键盘关闭动画的同步
  • rules
    • 修复了 API 级别 23 上的 ServiceTestRulestartService() 必须始终使用显式 Intent 调用
  • runner
    • 修复了损坏的 gradle JaCoCo 支持
    • 修复了损坏的测试分片支持
    • 修复了 JUnit3 样式测试超时后测试运行器中状态不一致的问题

其他值得注意的更改

  • Javadoc 修复和错误消息改进
  • 忽略 suite() 方法,并在使用方法过滤器时不忽略初始化错误

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

错误修复

  • 修复了 DrawerActions 泄漏 ParentListener 的问题
  • 假设失败现在被视为忽略测试,而不是失败测试
  • 修复了 MonitoringInstrumentation 通过 ExecutorService 泄漏活动实例的问题
  • 修复了孤立活动卡在停止阶段的问题
  • 更新 Until.scrollFinished() 以便在没有生成滚动事件时返回 true。防止 UiObject2#setText() 中潜在的 NPE。

Espresso 2.1、测试运行器/规则 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,通过允许测试作者验证和存根传出的意图来实现隔离的交互测试
    • IntentsTestRule:扩展 ActivityTestRule,在功能性 UI 测试中初始化和释放 Espresso-Intents
  • espresso-core
    • ViewActions:添加了在运行操作之前运行全局断言的功能。这对基于 Espresso 的其他框架很有用,用于在执行现有 Espresso 测试套件时验证视图层次结构的状态
    • ViewMatchers.withContentDescription() resId 重载
  • rules
    • ActivityTestRule:此规则提供对单个活动的函数测试
    • UiThreadRuleUiThreadTest 注解:此规则允许使用 UiThreadTest 注解的测试方法在应用程序的主线程(或 UI 线程)上执行
    • ServiceTestRule:此规则提供对服务的函数测试
  • runner
    • ApplicationLifecycleCallback:用于监控应用程序生命周期事件的回调
    • 现在可以使用 <meta-data> 标记在 Android 清单文件中指定所有运行器参数
  • UIAutomator
    • UiDevice.dumpWindowHierarchy() 现在可以接受 FileOutputStream

错误修复

  • espresso
    • 游标匹配器现在在列未找到时返回 false,以便 Hamcrest 可以继续执行下一个游标
    • PreferenceMatchers withTitle 不再出现 NullPointerException
    • 取消注册空闲资源不再导致 Espresso 认为我们有繁忙的空闲资源
    • 更新了 Espresso Contrib 使用的 Support Annotations 版本
  • runner
    • AndroidJUnit4 现在跳过具有失败假设的测试
  • UIAutomator
    • 运行观察者以防止 StaleObjectException

其他值得注意的更改

  • 在无法使用非拉丁字符串键入文本时添加更好的错误消息

UIAutomator 2.0 (2015-03-12)

UI Automator 现在基于 Android Instrumentation,您可以使用 ./gradlew connectedCheck 命令构建和运行测试。

Espresso 版本 2.0、测试运行器 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 中(它应该始终如此)
  • 为了支持重新打包 guava 依赖项并避免 DEX 冲突(开发中的主要痛点),已从公共 API 中删除了可选(guava 依赖项)。受影响的方法包括以下方法
    • ViewAssertion.check()
    • HumanReadables.getViewHierarchyErrorMessage()

新功能

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

错误修复

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

其他值得注意的更改

  • 从使用 Maven 构建切换到使用 Gradle
  • 将 Espresso 依赖项(Guava、Dagger、Hamcrest)移开,以避免 DEX 冲突
  • 更改为在注册和取消注册空闲资源时返回成功或失败
  • Lollipop 支持:将 message.recycle() 放置在接口后面以考虑与版本相关的更改
  • 将目标 SDK 级别切换到 21 - 主要影响测试应用程序

版本 1.1(发布日期:2014-01-08)

Espresso

  • 新的 swipeLeftswipeRight ViewActions
  • 多窗口支持:一项高级功能,可以启用选择 Espresso 应该在其上运行操作的目标窗口
  • TypeTextAction 的改进:允许在预先聚焦的视图中键入文本,这使得追加文本变得更容易
  • 许多错误修复

Espresso Contrib 库

  • 这个新库包含补充 Espresso 但不是核心库一部分的功能
  • 新的 DrawerActions 用于操作 DrawerLayout:它依赖于 Android 支持库,因此我们将它保留在核心 Espresso 库之外

示例测试

  • 这些测试已重新定位到与测试应用程序相同的包中
  • Maven POM 已修复以删除重复的 guava 依赖项,因此 mvn install 现在应该可以正常工作