Kaspresso中Scenario()内composeTestRule无法使用求助
解决Kaspresso Scenario中使用ComposeTestRule的初始化错误
问题原因
你手动实例化BaseTest()的方式是错误的:
BaseTest中的composeTestRule依赖JUnit的@get:Rule注解完成初始化,手动new BaseTest()创建的实例,其规则并未被JUnit测试框架正确初始化。- Compose测试框架检测不到有效初始化的
ComposeTestRule,因此抛出Test not setup properly错误。
解决方案
1. 调整BaseTest继承关系
让BaseTest继承Kaspresso的KaspressoTestCase,确保测试上下文能正确持有初始化后的规则:
class BaseTest : KaspressoTestCase() { @get:Rule val composeTestRule = createAndroidComposeRule<MainActivity>() // 其他通用测试逻辑 }
2. 修改Scenario的泛型与规则获取方式
将Scenario的泛型参数指定为BaseTest,通过TestContext的testCase属性获取已初始化的BaseTest实例,从而拿到有效的composeTestRule:
class FillOtp : Scenario() { override val steps: TestContext<BaseTest>.() -> Unit = { step("Write 0000") { // 获取JUnit初始化后的BaseTest实例及其composeTestRule testCase.composeTestRule .onNodeWithTag("test") .performClick() MyScreen { pinEdit { typeText("0000") } continueBtn.click() } } } }
3. 在测试类中执行Scenario
确保你的测试类继承BaseTest,并通过runScenario执行FillOtp:
class OtpTest : BaseTest() { @Test fun fillOtpTest() = runScenario(FillOtp()) }
这样就能保证composeTestRule是被JUnit正确初始化的实例,Compose测试框架可以正常识别并使用它。
内容的提问来源于stack exchange,提问作者Artem Vitov
相关产品推荐
相关产品推荐

