Testen in Kotlin: Frameworks und Tools für Entwickler

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Testen in Kotlin: Frameworks und Tools für zuverlässigen Code



Kotlin ist eine moderne Sprache, die aktiv für die Entwicklung von Android-Apps, Serverlösungen (Ktor, Spring Boot) und plattformübergreifenden Projekten eingesetzt wird. Die Codequalität hängt direkt von der Testabdeckung ab. In diesem Artikel betrachten wir die wichtigsten Testwerkzeuge für Kotlin: Frameworks zum Schreiben von Tests, Bibliotheken zum Mocking und Hilfsmittel zum Testen von Coroutinen.



1. JUnit 5 – die Grundlage des Testens



JUnit 5 ist das Standard-Framework für Modultests in Java/Kotlin. Es bietet die Annotationen @Test, @BeforeEach, @AfterEach und einen Erweiterungsmechanismus (Extensions). In Kotlin sehen Tests prägnant aus:



import org.junit.jupiter.api.Testimport org.junit.jupiter.api.Assertions.*

class CalculatorTest { private val calculator = Calculator()

@Test fun `addition should work correctly`() { assertEquals(4, calculator.add(2, 2)) }

@Test fun `division by zero throws exception`() { assertThrows<ArithmeticException> { calculator.divide(10, 0) } }}


Besonderheiten bei der Verwendung von JUnit 5 mit Kotlin:

  • Testnamen können in Backticks geschrieben werden – das verbessert die Lesbarkeit.
  • Funktioniert mit beliebigen Coroutinen über @Test und die Erweiterung kotlinx-coroutines-test.
  • Unterstützt parametrisierte Tests (@ParameterizedTest).


2. Kotest – ein leistungsstarkes Kotlin-First-Framework



Kotest (ehemals KotlinTest) ist ein vollwertiges Framework, das speziell für Kotlin entwickelt wurde. Es bietet mehrere Stile zum Schreiben von Tests: String Spec, Fun Spec, Describe Spec und andere. Ein Beispiel mit Behaviour Driven Development (BDD):



import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBe

class UserServiceTest : StringSpec({ "user should be created with correct name" { val user = UserService().createUser("Alice") user.name shouldBe "Alice" user.isActive shouldBe true }})


Vorteile von Kotest:

  • Integrierte Matcher (Überprüfungen) für Collections, Strings, Zahlen.
  • Unterstützung für Coroutinen, Daten-Provider (@TestFactory) und Timeouts.
  • Flexible Testkonfiguration über projectConfig.
  • Integration mit Gradle und Maven.


3. MockK – Mocking für Kotlin



MockK ist eine Bibliothek zum Erstellen von Mock-Objekten, die die Besonderheiten von Kotlin berücksichtigt: suspend-Funktionen, Extension-Funktionen, Sealed-Klassen und object-Singletons. Ein Anwendungsbeispiel:



import io.mockk.*import org.junit.jupiter.api.Test

class UserServiceTest { @Test fun `should call repository when saving user`() { val repo = mockk<UserRepository>() every { repo.save(any()) } returns Unit

val service = UserService(repo) service.saveUser("Bob")

verify { repo.save(any()) } }}


Schlüsselfunktionen von MockK:

  • mockk() – Erstellen eines Mocks, spyk() – partieller Mock eines realen Objekts.
  • coEvery und coVerify für die Arbeit mit Coroutinen.
  • Überprüfung der Aufrufreihenfolge (verifyOrder), Erfassen von Argumenten (slot).
  • Unterstützung der Annotationen @MockK und @RelaxedMockK.


4. Testen von Coroutinen: kotlinx-coroutines-test



Beim Testen von asynchronem Code mit Coroutinen ist es wichtig, die Zeit zu kontrollieren. Die Bibliothek kotlinx-coroutines-test bietet runTest und TestCoroutineDispatcher:



import ko                    

Empfehlungen