我有一个桌面应用程序,它的源代码是在单独的*. kt文件中有很多可组合的函数,

@Composable
fun MyView()
    ...

现在我必须在另一个文件中为这些函数编写UI测试.

@OptIn(ExperimentalTestApi::class)
@get:Rule
val rule = createComposeRule(???)

我找到了一个Android应用UI测试的例子:

class ExampleInstrumentedTest {
    @get:Rule
    val composeTestRule = createAndroidTestRule(MainActivity::class.java)          

但在我的桌面编写多平台应用程序中,我没有活动.在这种情况下,如何在创建合成测试规则时使用MyView()函数?

推荐答案

createComposeRule不带任何参数,是factory function.

有一个很好的document个关于如何使用这个函数和编写一般测试.

创建规则

@get:Rule val composeTestRule = createComposeRule()

(在测试中)将您的内容应用于规则

composeTestRule.setContent {
    MainScreen(uiState = fakeUiState, /*...*/)
}

测试某个 node 的可见性

composeTestRule.onNodeWithText("Welcome").assertIsDisplayed()

Edit

如果上面的内容不适用于composite for desktop,我建议您查看JetBrains测试库.

@OptIn(ExperimentalTestApi::class)
@Test
fun myTest() = runComposeUiTest {
    setContent { MainScreen(uiState = fakeUiState, /*...*/) }
    onNodeWithTag("text").assertTextEquals("Compose")
}

Kotlin相关问答推荐

创建具有共同父类型的两种不同类型对象的列表的最有效方法是什么?

最好的方法来创建一个 map 在kotlin从两个列表

kotlin短路列表判断吗?

为什么我的通用Kotlin函数中的这个转换未经判断?

Kotlin 获取继承类的默认 hashCode 实现

Android Jetpack Compose:在空的 Compose 活动中找不到 OutlinedTextField (Material3)

JetPack Compose:添加点击持续时间

如果不为空,则为 builder 设置一个值 - Kotlin

具有多个不同类型来源的 LiveData

Kotlin 语言是如何用 Kotlin 编写的?

如何在 Kotlin 文件中的 Android Studio 中控制何时将 Imports 替换为通配符

在 Scaffold Jetpack Compose 内的特定屏幕上隐藏顶部和底部导航器

如何在 Kotlin 中为变量设置监听器

从 Spring WebFlux 返回 Flux 返回一个字符串而不是 JSON 中的字符串数组

如何启用spring security kotlin DSL?

WebFlux 功能:如何检测空 Flux 并返回 404?

Kotlin var lazy init

在 Kotlin 中编写一个等于 Int.MIN_VALUE 的十六进制整数文字

尾随 lambda 语法(Kotlin)的目的是什么?

如何在伴随对象中使用泛型