Tests en Kotlin : frameworks et outils pour un code de qualité

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Tests en Kotlin : aperçu complet des frameworks et outils



Kotlin — un langage qui gagne rapidement en popularité dans le développement backend (Spring Boot, Ktor) et Android. Cependant, un langage puissant nécessite des outils de test adéquats. Dans cet article, nous analyserons les frameworks et bibliothèques clés pour tester les applications Kotlin : du classique JUnit5 aux modernes Kotest et MockK. Ce contenu sera utile aussi bien aux débutants qu'aux développeurs expérimentés venant de Java.



1. JUnit5 — la base des tests modernes



JUnit5 (Jupiter) — le standard de facto pour les tests unitaires en Java/Kotlin. En Kotlin, il est utilisé avec des particularités petites mais importantes.



  • Prise en charge des lambdas et des fonctions d'ordre supérieur — les tests peuvent être écrits de manière plus concise.
  • Annotations — @Test, @BeforeEach, @AfterAll fonctionnent comme en Java.
  • Assumptions et Assertions — vérifications intégrées.


Exemple d'un test simple avec JUnit5 et Kotlin :



import org.junit.jupiter.api.Assertions.assertEqualsimport org.junit.jupiter.api.Test

class CalculatorTest {

private val calculator = Calculator()

@Test fun `addition of two numbers should return correct sum`() { val result = calculator.add(2, 3) assertEquals(5, result) }

@Test fun `should throw exception when dividing by zero`() { assertThrows<IllegalArgumentException> { calculator.divide(10, 0) } }}


Important : Kotlin permet d'utiliser des espaces dans les noms des fonctions de test (backticks), ce qui rend les noms de tests lisibles en langage naturel.



2. Kotest — framework natif Kotlin



Kotest (anciennement KotlinTest) — est le framework le plus complet et flexible, entièrement écrit en Kotlin. Il propose plusieurs styles d'écriture de tests (string spec, specification, behavior-driven) et des matchers intégrés puissants.



Fonctionnalités clés :

  • Property-based testing — génération automatique de données de test.
  • Tests data-driven — avec des tableaux de données d'entrée.
  • Matchers d'assertion puissants — shouldBe, shouldContain, shouldThrow, etc.
  • Prise en charge des Coroutines — testCoroutineScope intégré.


Exemple de test en style "String Spec" :



import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBeimport io.kotest.matchers.shouldThrow

class UserServiceTest : StringSpec({

val service = UserService()

"should return user by id" { val user = service.getUser(1) user.name shouldBe "Alice" }

"should throw exception for invalid id" { shouldThrow<NoSuchElementException> { service.getUser(-1) } }})


Property-based testing dans Kotest :



import io.kotest.property.forAllimport io.kotest.property.arbitrary.int

class MathPropertiesTest : StringSpec({ "addition is commutative" { forAll<Int, Int> { a, b -> (a + b) == (b + a) } }})


3. MockK — mocks pour Kotlin



Contrairement à Mockito (qui peut également être utilisé), MockK est entièrement adapté aux spécificités de Kotlin : il prend en charge les sealed classes, object, extension functions et coroutines.



Fonctionnalités principales :

  • DSL concis pour créer des mocks et des stubs.
  • Prise en charge des mocks relax (appels non vérifiés).
  • Vérification de l'ordre des appels et du nombre d'appels.
  • Mocks pour les fonctions suspend.

Recommendations