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 老项目迁移系列,持续更新中。

相关推荐
程序员黎剑7 小时前
Spring-Bean生命周期-构造器访问Autowired字段为null
java·后端·spring
pengyu7 小时前
【Kotlin 协程修仙录 · 大乘境 · 初阶】 | 跳出三界:协程在 KMP 与后端开发中的跨平台之道
android·kotlin
XiaoLeisj7 小时前
Android Memory Profiler:堆内存指标、内存抖动与泄漏定位
android·性能优化·内存抖动·内存泄露·memory profiler
未来猫咪花7 小时前
Everything is ViewModel:让状态管理回到对象世界
android·flutter·ios
古法安卓7 小时前
Android-重启流程源码解析
android·java·android studio
清水白石0088 小时前
Python 类型设计深度解析:TypedDict 能否替代 dataclass?从 JSON 数据边界到 API 设计的最佳实践
java·python·json
晊晌_h8 小时前
嵌入式从0到精通——线程
java·开发语言·jvm
一木 之林8 小时前
五、C++ 新特性、关键字与编译原理(进阶)(二)
java·开发语言·c++
洋不写bug8 小时前
绕过权限检查,访问修改私有属性,反射,枚举,lambda
java·枚举·lambda·反射
evans在进步8 小时前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式