Тестирование проектов Kotlin с помощью Maven
Kotlin легко интегрируется в экосистему Maven, позволяя использовать стандартные отраслевые инструменты для проверки серверных приложений. В этом руководстве вы узнаете, как создавать тесты с помощью JUnit и использовать плагины Maven для запуска модульных и интеграционных тестов.
Создание тестов с помощью JUnit
JUnit — стандартный фреймворк для тестирования серверных приложений на Kotlin. Хотя Kotlin поддерживает несколько версий JUnit, в большинстве современных проектов следует использовать JUnit 6.
Чтобы создать тест на Kotlin с помощью JUnit, используйте аннотацию @Test из пакета kotlin.test или JUnit.
Добавление зависимости
Библиотека kotlin-test — самый простой способ начать работу. Она предоставляет общий набор проверок и автоматически подключает необходимые артефакты JUnit.
JUnit 5 и более поздние версии
Для всех новых проектов используйте артефакт kotlin-test-junit5. Он обеспечивает полную поддержку JUnit, включая такие возможности, как вложенные тесты и параллельное выполнение. Kotlin/JVM поддерживает последнюю стабильную версию JUnit — JUnit 6.
Обновите файл pom.xml следующим образом:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit5</artifactId>
<version>2.4.20</version>
<scope>test</scope>
</dependency>
</dependencies>
JUnit 4
Если вы хотите использовать более раннюю версию JUnit, например, в устаревшем проекте, используйте артефакт kotlin-test-junit, работающий с JUnit 4:
<!-- pom.xml -->
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
<version>2.4.20</version>
<scope>test</scope>
</dependency>
</dependencies>
Написание модульных тестов
Модульные тесты проверяют изолированные части кода, например отдельные функции или классы. По соглашению, имена модульных тестов имеют суффикс *Test. Например:
import kotlin.test.Test
import kotlin.test.assertEquals
class OrderServiceTest {
@Test
fun `calculate total should sum item prices`() {
val service = OrderService()
val result = service.calculateTotal(listOf(10.0, 25.0))
assertEquals(35.0, result)
}
}
Написание интеграционных тестов
Интеграционные тесты проверяют взаимодействие компонентов, например службы и базы данных. По соглашению, имена интеграционных тестов имеют суффикс *IT. Например:
import kotlin.test.Test
import kotlin.test.assertNotNull
class UserRepositoryIT {
@Test
fun saveFindUser() {
// Example integration with a database or service
val repository = UserRepository()
repository.save(User("KotlinUser"))
val user = repository.findByName("KotlinUser")
assertNotNull(user)
}
}
Запуск тестов
В проектах Maven выполнение тестов обычно разделено между двумя плагинами — Surefire и Failsafe, что обеспечивает четкий жизненный цикл сборки.
С помощью плагина Surefire
Плагин Surefire отвечает за модульные тесты. Он запускает все тесты Kotlin и Java, соответствующие шаблону именования *Test.
По умолчанию он выполняется на этапе test жизненного цикла сборки и сразу завершает сборку с ошибкой, если какой-либо тест не пройден.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.5</version>
</plugin>
Чтобы запустить только модульные тесты, используйте следующую команду:
mvn test
С помощью плагина Failsafe
Плагин Failsafe отвечает за интеграционные тесты. Он запускает все тесты Kotlin и Java, соответствующие шаблону именования *IT.
В отличие от Surefire, Failsafe позволяет сборке продолжаться, даже если тест завершается с ошибкой на этапе integration-test, благодаря чему могут выполниться задачи этапа post-integration-test (например, остановка контейнера Docker). Если обнаружены ошибки в тестах, сборка завершается с ошибкой на этапе verify.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.5.5</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Чтобы запустить модульные и интеграционные тесты, используйте следующую команду:
mvn verify
Подробные сообщения об ошибках
Плагин компилятора Power-assert для Kotlin формирует подробные сообщения об ошибках, показывающие промежуточные значения в проверках. Благодаря этому в выводе консоли отображаются полные диаграммы.
-
Чтобы включить Power-assert, добавьте следующую конфигурацию в файл
pom.xmlпроекта:<properties> <kotlin.version>2.4.20</kotlin.version> <kotlin.compiler.jdkRelease>17</kotlin.compiler.jdkRelease> </properties> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-test-junit5</artifactId> <version>${kotlin.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <extensions>true</extensions> <executions> <execution> <id>compile</id> <phase>process-sources</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>process-test-sources</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> <configuration> <!-- Specify the Power-assert plugin --> <compilerPlugins> <plugin>power-assert</plugin> </compilerPlugins> <!-- Specify the functions to transform --> <pluginOptions> <option>power-assert:function=kotlin.test.assertEquals</option> <option>power-assert:function=kotlin.test.assertTrue</option> </pluginOptions> </configuration> <!-- Add the Power-assert plugin dependency --> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-power-assert</artifactId> <version>${kotlin.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>В разделе
<properties>укажите версию Kotlin и целевую версию JDK, например JDK 17.В разделе
<dependencies>добавьтеkotlin-test-junit5для запуска тестов.В разделе
<build><plugins>настройтеkotlin-maven-pluginс помощью плагина компилятораpower-assert. Перечислите функции проверки, которые нужно преобразовать, в разделе<pluginOptions>и добавьте зависимость плагина Power-assert.
-
Создайте файл теста
UserProfileBackendTest.ktв каталогеsrc/test/kotlin:import kotlin.test.Test import kotlin.test.assertEquals class UserProfileBackendTest { data class UserProfile(val id: Long, val email: String) @Test fun `verify backend entity mapping matches`() { // Define expected object state val expectedRecord = UserProfile(id = 451L, email = "admin-dev@company.internal") // Simulate a mismatched backend response val actualRecord = UserProfile(id = 451L, email = "admin-prod@company.com") // Use a standard kotlin.test assertion assertEquals(expectedRecord, actualRecord, "Profile configurations out of sync") } } -
Запустите тест и проверьте вывод:
mvn test
В консоли отображается полная диаграмма Power-assert, показывающая разницу между ожидаемыми и фактическими значениями в каждой точке выражения:
Profile configurations out of sync
assertEquals(expectedRecord, actualRecord, "Profile configurations out of sync")
| |
| UserProfile(id=451, email=admin-prod@company.com)
UserProfile(id=451, email=admin-dev@company.internal)
Другие фреймворки для тестирования
Помимо JUnit, вы можете использовать другие популярные фреймворки, чтобы сделать тесты на Kotlin более идиоматичными и удобочитаемыми:
Библиотека |
Описание |
|---|---|
Библиотека проверок с гибким API и возможностью объединять проверки в цепочки. |
|
Обертка Mockito для Kotlin с вспомогательными функциями и улучшенной интеграцией с системой типов Kotlin. |
|
Нативная библиотека для создания моков в Kotlin, поддерживающая специфичные для Kotlin возможности, включая сопрограммы и функции-расширения. |
|
Библиотека проверок для Kotlin с несколькими стилями утверждений и широкими возможностями сопоставления. |
|
Библиотека проверок для Kotlin с типобезопасными утверждениями и поддержкой классов данных. |
Что дальше
Изучите возможности библиотеки
kotlin.test.Подробнее узнайте о плагине компилятора Power-assert.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/jvm-test-maven.html