Jetpack Compose 重试测试规则

Jetpack Compose retry test rule

提问人:AShX 提问时间:5/18/2023 最后编辑:AShX 更新时间:6/20/2023 访问量:246

问:

我有一个基于 Jetpack Compose 的应用程序,其中包含下一个基本测试规则设置:

val activityComposeRule by lazy { createAndroidComposeRule<MainActivity> }
// Barista retry rule if test failed
val flakyRule = FlakytestRule().allowFlakyAttemptsByDefault(2)
val permissionRule = ...

@get:Rule   
val rulechain:RuleChain = run {
 RuleChain.outerRule (permissionRule).around(activityComposeRule).around(flakyRule )
}

对于节点交互,在测试代码中使用 activityComposeRule

activityComposeRule.onNode(...)

问题是,当测试失败时,它无法重新运行测试 - 它失败了

Cannot call setContent twice per test!

我从开发人员那里找到了一个解决方案,他们建议将其与 一起使用 ,如下所示createEmptyComposeRule()ActivityScenario<T>

@get:Rule
val composeTestRule = createEmptyComposeRule()

@get:Rule
val flakyRule = FlakyTestRule().allowFlakyAttemptsByDefault(defaultAttempts = 10)

private lateinit var scenario: ActivityScenario<ComponentActivity>

@Before
fun setup() {
    scenario = ActivityScenario.launch(ComponentActivity::class.java)
}

@After
fun tearDown(){
    scenario.close()
}

@Test
@Repeat(times = 10)
fun test() {
        scenario.onActivity {
            it.setContent { ... }
        }
    }

但是重构整个代码会很痛苦。

有没有办法使用咖啡师规则在不更改的情况下重新运行片状测试?createAndroidComposeRule<MainActivity>

提前致谢

VPg的。Google Tracker 的类似问题 - 链接

Android 测试 wear-os android-jetpack

评论


答: 暂无答案