Özet - Test
- Kotlin kursu
- Orta seviye
- Ders 111/116
- 5 dk
@Test, assertions ve MockK'yı birleştirerek bir hesap makinesi testi yazarsın.
Özet - Test
Bu grupta JUnit çerçevesini, @Test annotasyonunu, assertEquals/assertTrue assertion'larını, @BeforeEach/@AfterEach kurulum/yıkımını ve MockK ile sahtelemeyi öğrendin.
Şimdi bunları birleştireceksin: Calculator sınıfına hem add hem multiply ekleyip iki assertion ile test edecek, ardından fake service deseni ile bağımlılık sahteleyeceksin. Bu yapı, Kotlin'de güvenilir test yazmanın temelidir. İleride property-based testing ve entegrasyon testleri bu temelin üzerine eklenecek.
Uygulama add ve multiply'ı test et
class Calculator tanımla; içinde fun add(a: Int, b: Int): Int = a + b ve fun multiply(a: Int, b: Int): Int = a * b olsun. Ardından fun assertEquals(expected: Int, actual: Int, label: String) yardımcı fonksiyonu tanımla. main içinde val c = Calculator() oluştur; assertEquals(5, c.add(2, 3), "add") ve assertEquals(12, c.multiply(3, 4), "multiply") çağrılarını yap; println("all passed") yazdır.
Başlangıç kodu
class Calculator {
fun add(a: Int, b: Int): Int = a + b
fun multiply(a: Int, b: Int): Int = a * b
}
fun assertEquals(expected: Int, actual: Int, label: String) {
if (expected != actual) throw AssertionError("$label: expected $expected but was $actual")
}
// main: add(2,3) ve multiply(3,4) sonuçlarını assertEquals ile doğrula
// "all passed" yazdır
fun main() {
// buraya yaz
}Örnek çözüm
fun main() {
val c = Calculator()
assertEquals(5, c.add(2, 3), "add")
assertEquals(12, c.multiply(3, 4), "multiply")
println("all passed")
}Beklenen çıktı
all passed
Uygulama Fake Greeter deseni
interface Greeter tanımla; içinde fun greet(name: String): String olsun. class FakeGreeter : Greeter tanımla; greet gövdesi "Merhaba, $name!" döndürsün. class App(private val greeter: Greeter) tanımla; fun run(name: String): String gövdesi greeter.greet(name) döndürsün. main içinde val app = App(FakeGreeter()) oluştur; println(app.run("Ayşe")) yazdır.
Başlangıç kodu
interface Greeter {
fun greet(name: String): String
}
// FakeGreeter: Greeter uygulayan sahte sınıf, "Merhaba, {name}!" döndürsün
// App: greeter alır, run(name) metodu greeter.greet(name) döndürsün
// main: FakeGreeter ile App oluştur, "Ayşe" için run çağrısını yazdır
fun main() {
// buraya yaz
}Örnek çözüm
interface Greeter {
fun greet(name: String): String
}
class FakeGreeter : Greeter {
override fun greet(name: String): String = "Merhaba, $name!"
}
class App(private val greeter: Greeter) {
fun run(name: String): String = greeter.greet(name)
}
fun main() {
val app = App(FakeGreeter())
println(app.run("Ayşe"))
}Beklenen çıktı
Merhaba, Ayşe!
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangisi bir test annotasyonudur?
- @Main
- @Test Doğru cevap
- @Class
- @Public
Açıklama: @Test, JUnit'in test metodu annotasyonudur.
2 Test kavramlarını eşle
| Kavram | Anlamı |
|---|---|
JUnit |
Test çerçevesi |
@Test |
Test metodu |
assertEquals |
Eşitlik doğrulama |
MockK |
Sahteleme |