Spec-Zone.ru › Kotlin 2

Тестирование пользовательского интерфейса Compose Multiplatform

Тестирование пользовательского интерфейса в Compose Multiplatform реализовано с помощью тех же средств поиска элементов, проверок, действий и сопоставителей, что и API тестирования Jetpack Compose. Если вы с ними не знакомы, перед тем как продолжить чтение этой статьи, ознакомьтесь с руководством по Jetpack Compose.

API находится на стадии экспериментальной разработки. В будущем он может измениться.

Чем тестирование 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 следующим образом:

  1. В файле shared/build.gradle.kts добавьте следующий код в блок androidLibrary {}, чтобы настроить зависимость набора исходных файлов для инструментированных тестов от общего набора исходных файлов для тестов.

    kotlin {
        //...
        androidLibrary {
            withDeviceTestBuilder { 
                sourceSetTreeName = "test"
            }
        } 
    }
    
  2. В файле androidApp/build.gradle.kts добавьте следующий код в блок android.defaultConfig {}, чтобы настроить средство запуска инструментирования тестов Android:

    android {
        //...
        defaultConfig {
            //...
            testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        }
    }
    
  3. В файле 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")
    }
    
  4. Выберите в главном меню Build | Sync Project with Gradle Files или нажмите кнопку обновления Gradle в редакторе скрипта сборки.

  5. Не забудьте создать набор исходных файлов 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.

15 мая 2026 г.
Всплывающие окнаЛокализация строк

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API