CodeBlanks Logo Icon CodeBlanks

Özet - Test

@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

Main.kt
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

Main.kt
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

Main.kt
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

Main.kt
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

Orta seviye bölümündeki tüm dersler