如何在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
相关产品推荐
相关产品推荐

