Curso De Testing Kotlin ((full)) May 2026
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.delay class ApiClientTest {
result.shouldBe(200) list.shouldContain("Kotlin") exception.shouldThrow<IllegalArgumentException> Kotlin Coroutines are amazing for production, but they are a nightmare for testing if you don't know the tricks. A naive test will pass when it should fail because the coroutine hasn't finished yet. The Golden Rule: runTest Never use Thread.sleep() in tests. Use kotlinx-coroutines-test . curso de testing kotlin
@Test fun `adding 2 and 3 should return 5`() { val result = Calculator().add(2, 3) assertEquals(5, result) // Or even nicer: assertNotNull(result) } } import kotlinx
Use backticks to write sentences as test names. Your test reports will read like documentation. Module 2: The Game Changer – Kotest If you take only one thing from this curso , let it be Kotest . It is the flagship testing framework for Kotlin, replacing JUnit with a radically different syntax. Why Kotest? It supports Spec styles (BehaviorSpec, StringSpec, FreeSpec) and Property Testing out of the box. Example: The Behavior Spec class UserServiceTest : BehaviorSpec({ val service = UserService() given("A user with a valid email") { val email = "test@example.com" `when`("I call register") { val result = service.register(email) then("It should return a success message") { result shouldBe "User created" } and("The user should be stored in the DB") { service.exists(email) shouldBe true } } } }) Assertions: shouldBe vs shouldNotBe Kotest replaces assertEquals with infix functions: Use kotlinx-coroutines-test
If you are reading this, you probably already love Kotlin for its conciseness and power. You use data classes , when expressions, and extension functions daily. But when it comes to testing that code, do you feel like you are still living in the past? Are you writing tests that look like Java 6?
In this guide, we will move from basic JUnit setup to advanced property-based testing and coroutine simulation. Forget the old @Test annotations that feel clunky. Kotlin allows us to write tests that read like plain English. The Setup (Gradle) // build.gradle.kts dependencies { testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") testImplementation("org.jetbrains.kotlin:kotlin-test-junit5") } The First Test: Clean Syntax Notice how we avoid assertThat(actual).isEqualTo(expected) (Hamcrest) or Assert.assertEquals() (JUnit). Instead, we use Kotlin's infix functions via the kotlin.test library.
// Real code class ApiClient { suspend fun fetchUser(id: String): User { delay(3000) // Simulate network return User("John Doe") } }