Test en Kotlin : frameworks et outils pour un code de qualité
Kotlin est un langage de programmation moderne fonctionnant sur la JVM. Grâce à sa compatibilité avec Java, il est possible d'utiliser des frameworks Java classiques (JUnit, Mockito) pour tester le code Kotlin, ainsi que des outils modernes spécialement conçus pour Kotlin. Dans cet article, nous analyserons les principaux frameworks, leurs caractéristiques et fournirons des exemples pratiques.
1. JUnit 5 — la base des tests
JUnit 5 est le framework standard pour les tests unitaires sur la JVM. Il fonctionne parfaitement avec Kotlin grâce à la prise en charge des lambdas, des fonctions d'extension et des classes de données.
import org.junit.jupiter.api.Testimport org.junit.jupiter.api.Assertions.*
class CalculatorTest { @Test fun `addition should return correct sum`() { val result = Calculator().add(2, 3) assertEquals(5, result) }}Caractéristiques de JUnit 5 en Kotlin :
- Les noms de tests peuvent être écrits entre accents graves avec des espaces — la lisibilité est améliorée
- Prise en charge des tests paramétrés via
@ParameterizedTest - Fonctions d'assertion intégrées (assertAll, assertThrows)
- Se combine facilement avec MockK et Mockito
2. Kotest — un framework de nouvelle génération
Kotest (anciennement KotlinTest) est un framework puissant écrit entièrement en Kotlin. Il propose de nombreux styles de description de tests (StringSpec, BehaviorSpec, FunSpec, etc.).
import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBe
class StringSpecExample : StringSpec({ "length should return correct size" { "hello".length shouldBe 5 } "startsWith should work" { "world".startsWith("wo") shouldBe true }})Avantages de Kotest :
- Plus de 200 matchers intégrés (shouldBe, shouldContain, shouldBeGreaterThan)
- Prise en charge des tests basés sur les propriétés (génération de données aléatoires)
- Fournisseurs de données intégrés pour les tests tabulaires
- Intégration complète avec Gradle et Maven
3. MockK — des mocks pour Kotlin
MockK est une bibliothèque pour créer des objets mock, spécialement conçue pour Kotlin. Elle prend en compte la null-safety, les coroutines et les fonctions d'extension.
import io.mockk.everyimport io.mockk.mockkimport io.mockk.verifyimport org.junit.jupiter.api.Test
class UserServiceTest { @Test fun `should call repository`() { val repo = mockk<UserRepository>() every { repo.findUser(1) } returns User("Alice")
val service = UserService(repo) service.getUserName(1)
verify { repo.findUser(1) } }}Fonctionnalités clés de MockK :
- Prise en charge de
spy(mocking partiel) - Fonctionne avec les fonctions suspend et les coroutines (
coEvery,coVerify) - Matchers pratiques pour les arguments (
any(),capture()) - Réinitialisation automatique des mocks après le test
4. Spek — style de test BDD
Spek est un framework pour le Behaviour-Driven Development. Il permet de décrire les tests au format « Given-When-Then ».
import org.spekframework.spek2.Spekimport org.spekframework.spek2.style.specification.describe
class CalculatorSpek : Spek({ describe("Calculator") { val calc by memoized { Calculator() }
context("addition") { it("returns sum of two numbers") { val result = calc.add(2, 3) assertEquals(5, result) } } }})Caractéristiques de Spek :
- Structure de tests lisible pour les spécifications métier
- Prise en charge des contextes imbriqués et des fixtures globales
- Intégration avec
Aussi dans la bibliothèque
ClosedXML C# (.NET) : guide complet avec exemples
Bibliothèques GraphQL TypeScript : Guide complet pour choisir et utiliser
Travailler avec S3 et les stockages cloud en Node.js : la bibliothèque @aws-sdk/client-s3
Tests en Go (Golang) : frameworks et outils