Instrumentation → Compose Testing

Instrumentation 测试(老写法)→ Compose Testing

老写法(Java --- Espresso Instrumentation)

java 复制代码
@Test
public void clickButton_showsResult() {
    onView(withId(R.id.btn_search)).perform(click());
    onView(withId(R.id.tv_result)).check(matches(withText("结果")));
}

问题在哪里

Espresso 测试需要运行在设备/模拟器上,慢(每次至少几十秒)。ViewMatcher 的 withId + withText 嵌套查询对于复杂 UI 可读性很差。测试执行依赖 View 层级,UI 的任何改动都会影响测试。

新写法(Compose Testing)

kotlin 复制代码
@Test
fun `click button shows result`() = runTest {
    composeTestRule.setContent {
        MyScreen(viewModel = fakeViewModel)
    }

    composeTestRule
            .onNodeWithTag("btn_search")
            .performClick()

    composeTestRule
            .onNodeWithTag("tv_result")
            .assertTextEquals("结果")
}

一句话注意

Compose Testing 不依赖真实设备 View 层级,可以直接运行在 JVM 上(不需要模拟器),一秒内就能跑完。SemanticsNode 替代了 View,通过 testTag 定位元素比 Espresso 的 withId 更快更稳定。

如果项目是 View 和 Compose 混用,可以两者一起用------Compose 部分用 composeTestRule,View 部分用 Espresso。但新写的 Compose 页面直接用 Compose Testing 测试即可,不需要 Espresso。


Java Android 老项目迁移系列,持续更新中。

相关推荐
snow@li1 小时前
MapStruct:高性能Bean映射框架全景深入梳理
java
木由里予1 小时前
TEE(Trusted Execution Environment)技术详解
java·linux·开发语言·网络·嵌入式硬件·android-studio
lemon_sjdk1 小时前
Spring 容器与 Bean 深度解析:从概念到实践
java·网络·spring·webflux
过往的时光1 小时前
Spring Boot、Spring Cloud 与 Spring Cloud Alibaba 版本对照终极指南
java·spring boot·spring cloud
小比特-combat1 小时前
FreeRTOS任务通知
java·服务器·前端
snow@li1 小时前
SpringBoot:Payload统一响应包装/全景深入梳理
java·spring boot·后端
中国搜索直付通1 小时前
游戏车机端支付通道,会是下一个被低估的合规战场吗?
java·大数据·开发语言·人工智能·游戏
sz_denny1 小时前
android aab导出apk
android
AKA__Zas2 小时前
芝士算法(位运算)
java·开发语言·算法·leetcode·学习方法