Testing memastikan kode berperilaku sesuai harapan. Kotlin memudahkan testing lewat kotlin-test, JUnit 5, mockk, dan dukungan testing coroutine.
Memahami mengapa kita menulis test, jenis-jenis test (unit, integration, e2e), pola Arrange-Act-Assert, dan test pyramid.
Buka → # kotlin-testMengenal paket kotlin.test: assertEquals, assertTrue, assertFailsWith, dan peran sebagai lapisan assertion multiplatform.
Buka → # JUnit JupiterMengenal JUnit 5 (Jupiter): @Test, @BeforeEach, @AfterEach, @DisplayName, @Disabled, dan method assertion bawaan.
Buka → # AssertionsMenguasai assertion dasar dan lanjutan: assertEquals, assertNotEquals, assertTrue, assertNull, assertNotNull, assertThrows, dan assertAll untuk grup assertion.
Buka → # Parameterized TestsMengulang test yang sama dengan banyak input: @ParameterizedTest, @ValueSource, @CsvSource, dan @MethodSource.
Buka → # Test LifecycleMempelajari urutan @BeforeAll, @BeforeEach, @Test, @AfterEach, @AfterAll, serta perbedaan static vs instance method.
Buka → # Mocking FundamentalsMengenal konsep mock: mengganti dependency dengan double terkontrol, perbedaan Stub vs Mock vs Spy vs Fake, dan kapan harus memakai mock.
Buka → # MockKMenguasai MockK: mockk<Class>(), every { } returns, verify { }, DSL Kotlin idiomatik untuk mocking.
Buka → # Stubs, Mocks, dan FakesTaksonomi test doubles: kapan memakai Stub (return fixed), Fake (implementasi sederhana), atau Mock (verifikasi panggilan).
Buka → # Coroutine TestingMenguji coroutine dengan runTest dari kotlinx-coroutines-test: virtual time, TestDispatcher, dan skip delay otomatis.
Buka → # Flow TestingMenguji Flow dengan Turbine: flow.test { awaitItem(); awaitComplete(); awaitError() } dan alternatif tanpa library.
Buka → # Integration TestingMenguji integrasi beberapa komponen nyata: pola @SpringBootTest, Ktor testApplication, dan pilihan real database vs Testcontainers.
Buka → # Database TestingStrategi menguji repository: H2 in-memory untuk kecepatan, Testcontainers Postgres untuk kepercayaan, dan migration test untuk skema.
Buka → # Test FixturesSetup bersama dengan @BeforeEach, fixture function, dan test data builder untuk menyusun objek uji yang ringkas dan konsisten.
Buka → # Test CoverageMengukur cakupan test dengan JaCoCo: perbedaan line coverage vs branch coverage, kesalahpahaman umum tentang angka 100%, dan apa yang sebaiknya diuji.
Buka → # Property-Based TestingMenguji sifat (property) yang harus selalu benar dengan input acak: kotest property testing, jqwik, dan menemukan edge case otomatis.
Buka → # TestcontainersMenjalankan service nyata di Docker saat test: PostgreSQLContainer, GenericContainer, dan lifecycle container yang otomatis.
Buka → # Testing Best PracticesPrinsip praktik testing: uji perilaku bukan implementasi, satu assertion per test, penamaan jelas, test cepat dan hermetic.
Buka →