Тестирование пользовательского интерфейса Compose Multiplatform
Тестирование пользовательского интерфейса в Compose Multiplatform реализовано с помощью тех же средств поиска элементов, проверок, действий и сопоставителей, что и API тестирования Jetpack Compose. Если вы с ними не знакомы, перед тем как продолжить чтение этой статьи, ознакомьтесь с руководством по Jetpack Compose.
Чем тестирование Compose Multiplatform отличается от Jetpack Compose
Общий API тестирования Compose Multiplatform не использует класс TestRule из JUnit. Вместо этого вы вызываете функцию runComposeUiTest и вызываете функции тестирования для получателя ComposeUiTest.
Однако для целевых платформ desktop доступен API на основе JUnit.
Написание и запуск тестов с Compose Multiplatform
Сначала добавьте в модуль набор исходных файлов для тестов и необходимые зависимости. Затем напишите и запустите пример теста и попробуйте настроить его.
Создание набора исходных файлов для тестов и добавление библиотеки тестирования в зависимости
Для наглядности инструкции на этой странице следуют структуре проекта, сгенерированной с помощью мастера Kotlin Multiplatform. Если вы добавляете тесты в существующий проект, возможно, потребуется заменить shared в путях и командах на имя тестируемого модуля.
Если при работе с мастером Kotlin Multiplatform вы выберете параметр Include tests, он создаст базовую структуру для тестов, включая наборы исходных файлов *Test.
Настройте библиотеку для тестирования пользовательского интерфейса: в файле shared/build.gradle.kts добавьте библиотеку для тестирования пользовательского интерфейса в зависимости набора исходных файлов commonTest.
kotlin {
//...
sourceSets {
// Adds the common test dependency
commonTest.dependencies {
//...
implementation("org.jetbrains.compose.ui:ui-test:1.12.0")
}
// Adds the desktop test dependency
jvmTest.dependencies {
implementation(compose.desktop.currentOs)
}
}
}
Если вам нужно запускать инструментированные тесты (в эмуляторе) для Android, измените конфигурацию Gradle следующим образом:
-
В файле
shared/build.gradle.ktsдобавьте следующий код в блокandroidLibrary {}, чтобы настроить зависимость набора исходных файлов для инструментированных тестов от общего набора исходных файлов для тестов.kotlin { //... androidLibrary { withDeviceTestBuilder { sourceSetTreeName = "test" } } } -
В файле
androidApp/build.gradle.ktsдобавьте следующий код в блокandroid.defaultConfig {}, чтобы настроить средство запуска инструментирования тестов Android:android { //... defaultConfig { //... testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } } -
В файле
androidApp/build.gradle.ktsдобавьте необходимые зависимости в корневой блокdependencies {}:dependencies { androidTestImplementation("androidx.compose.ui:ui-test-junit4-android:1.11.2") debugImplementation("androidx.compose.ui:ui-test-manifest:1.11.2") } Выберите в главном меню Build | Sync Project with Gradle Files или нажмите кнопку обновления Gradle в редакторе скрипта сборки.
-
Не забудьте создать набор исходных файлов
shared/src/androidDeviceTestдля инструментированных тестов. Даже если большая часть тестов находится вcommonTest, в каталогеandroidDeviceTestдолжен быть как минимум файлAndroidManifest.xml, указывающий на общее действие, которое будут использовать тесты:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application> <activity android:name="androidx.activity.ComponentActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Теперь вы готовы писать и запускать общие тесты пользовательского интерфейса Compose Multiplatform.
Написание и запуск общих тестов
В каталоге shared/src/commonTest/kotlin/<package> создайте файл с именем ExampleTest.kt и скопируйте в него следующий код:
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.assertTextEquals
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.v2.runComposeUiTest
import kotlin.test.Test
class ExampleTest {
@OptIn(ExperimentalTestApi::class)
@Test
fun myTest() = runComposeUiTest {
// Declares a mock UI to demonstrate API calls
//
// Replace with your own declarations to test the code of your project
setContent {
var text by remember { mutableStateOf("Hello") }
Text(
text = text,
modifier = Modifier.testTag("text")
)
Button(
onClick = { text = "Compose" },
modifier = Modifier.testTag("button")
) {
Text("Click me")
}
}
// Tests the declared UI with assertions and actions of the Compose Multiplatform testing API
onNodeWithTag("text").assertTextEquals("Hello")
onNodeWithTag("button").performClick()
onNodeWithTag("text").assertTextEquals("Compose")
}
}
Чтобы запустить тесты:
Есть два варианта:
В IntelliJ IDEA можно нажать зелёный значок запуска на поле слева от функции
myTest(), выбрать Run | ExampleTest.myTest, а затем выбрать целевую платформу iOS для теста.-
Выполните в терминале следующую команду:
./gradlew :shared:iosSimulatorArm64Test
Выполните эту команду в терминале:
./gradlew :shared:connectedAndroidTest
Сейчас нельзя запускать общие тесты Compose Multiplatform с помощью конфигураций тестирования android (local), поэтому значки на поле слева, например в Android Studio, не помогут.
Есть два варианта:
Нажмите зелёный значок запуска на поле слева от функции
myTest()и выберите Run | ExampleTest.myTest, а затем выберите целевую платформу JVM.-
Выполните в терминале следующую команду:
./gradlew :shared:jvmTest
Выполните эту команду в терминале:
./gradlew :shared:wasmJsTest
Что дальше
Теперь, когда вы освоили тестирование пользовательского интерфейса Compose Multiplatform, ознакомьтесь с другими материалами о тестировании:
Общий обзор тестирования в проекте Kotlin Multiplatform см. в разделе «Основная структура проекта» и в руководстве «Тестирование многоплатформенного приложения».
Сведения о настройке и запуске тестов на основе JUnit для целевых платформ desktop см. в статье «Тестирование пользовательского интерфейса Compose Multiplatform с помощью JUnit».
Сведения о тестировании локализации см. в разделе «Тестирование локалей на разных платформах».
Более продвинутые возможности тестирования в Android Studio, включая автоматизацию, описаны в статье «Тестирование приложения» в документации Android Studio.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-test.html