You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jetpack Compose测试中验证异常是否抛出

为什么现有方案无法捕获异常

Jetpack Compose的事件回调(包括onClick)执行在Compose框架独立的执行上下文中,回调中抛出的未处理异常会被Compose测试框架默认的异常处理器捕获,不会冒泡到测试方法的调用栈中。你之前尝试的三种方案都是在测试线程的调用栈中捕获异常,自然拿不到Compose内部抛出的异常。

你遗漏了什么

你没有使用Compose测试框架提供的异常捕获API,而是直接在测试代码的外层尝试捕获,完全没有触达异常实际抛出的上下文。

正确的测试方式

你可以通过替换ComposeTestRule的未捕获异常处理器来收集Compose上下文抛出的异常,示例代码如下:

@Test
fun verifyButtonClickThrowsCorrectException() {
    val thrownExceptions = mutableListOf<Throwable>()
    // 替换默认异常处理器,收集所有未捕获异常
    composeRule.uncaughtExceptionHandler = { throwable ->
        thrownExceptions.add(throwable)
    }

    // 执行按钮点击操作
    composeRule.onNodeWithText(ACTION_THROW_ERROR).performClick()
    // 等待Compose端所有操作执行完毕
    composeRule.waitForIdle()

    // 校验异常是否符合预期
    assert(thrownExceptions.size == 1)
    assert(thrownExceptions.first() is IllegalArgumentException)
}

内容的提问来源于stack exchange,提问作者theapache64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:45:05