测试版发行说明存档

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 支持启动其他 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-ktx kotlin 扩展构件!包括一个 kotlin 友好的 ActivityScenario.launchActivity API
    • 用于使用自定义意图启动 Activity 的新 ActivityScenario API
    • 用于接收 Activity 结果的新 ActivityScenario API
    • 使 ActivityScenario 可关闭
  • Espresso
    • 修改 withResourceNameMatcher 和 HumanReadables 以与 API 28 兼容。
    • 更新 ReplaceTextAction 的说明以包含 stringToBeSet
    • 在 Robolectric 暂停的 looper 模式下支持 Espresso。
  • JUnit
    • 新的 ActivityScenarioRule API,用于在测试设置和拆卸时自动启动和关闭 Activity
    • 新的 junit-ktx kotlin 扩展构件!包括一个 kotlin 友好的 ActivityScenarioRule API
  • Runner
    • 使 -e package 和 -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。旨在与新的真相断言一起使用
  • 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' 参数时才启用协调器覆盖处理。
    • 仅在设置 -debug 时才等待调试器,但不等待列出 ATO 测试用例。添加了一个新的 orchestratorDebug 标志用于调试协调器本身。
  • 核心
    • 新的构件!包含支持本地和设备上测试的新 API,用于:
      • 检索上下文:ApplicationProvider
      • 控制活动生命周期:ActivityScenario(Beta)
      • MotionEvent 和 PackageInfo 的构建器
      • Parcelable 实用程序类
  • Truth
    • 新的构件!包含针对 Notification、Intent、Bundle、Parcelable 和 MotionEvent 的自定义真相主题。
  • 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 中的失败
  • 规则
    • 确保在生命周期更改后释放对测试中 Activity 的引用。在测试期间,现在可以使用从 #getActivity() 获取的引用直接操作 Activity。如果 Activity 已完成并重新启动,则 #getActivity() 返回的引用现在始终指向 Activity 的当前实例。
    • 问题 64389280GrantPermissionRule 不提供 WRITE_EXTERNAL_STORAGE
    • 问题 37065965ActivityTestRule 在屏幕方向更改后泄漏 Activity
    • 问题 75254050ActivityTestRule 在配置更改期间不更新 Activity 实例
    • 问题 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

  • Runner

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

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

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

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

  • 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:将缺失的类添加到 sources 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 测试编排器 提供了一种新的收集和运行测试的方法,重点在于正确性和隔离性。编排器是一个独立的 Instrumentation 进程,为每个测试生成一个 Instrumentation 运行器进程并收集结果。
      • 应用程序崩溃会使运行器 Instrumentation 失败,但不会使编排器失败,从而允许你的测试套件继续进行
      • 需要安装编排器 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:在 Android Design Support Library 中添加对 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 Support Design Library 中添加对 NavigationView 的支持
    • 添加了对启用动画和转换的检查
    • 新的 ViewMatcher API:withResourceName()

错误修复

  • espresso
    • 问题 195331espresso-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-09-15)

新功能

  • rules
    • 添加新的IntentsTestRule构造函数,以完全兼容ActivityTestRule
  • runner
    • 为API级别15及以下版本添加了特殊的multidex安装
    • 向类和包添加了排除过滤器
      • 运行所有测试,除了特定类中的测试: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上的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可以继续到下一个游标
    • NullPointerExceptionPreferenceMatchers withTitle不再发生
    • 注销空闲资源不再导致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.espressoandroid.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:处理与RecyclerView的交互
      • PickerActions:处理与日期时间选择器的交互
  • 匹配器
    • 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但不是核心库一部分的功能
  • 用于操作DrawerLayout的新DrawerActions:依赖于Android支持库,因此我们将其保留在Espresso核心库之外

示例测试

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