@BeforeEach
- Kotlin kursu
- Orta seviye
- Ders 109/116
- 5 dk
@BeforeEach ve @AfterEach ile fixture öğrenirsin.
@BeforeEach / @AfterEach
@BeforeEach annotasyonu, her test metodundan önce çalışan bir metodu işaretler. @AfterEach ise her testten sonra çalışır. Bunlar, testlerin ortak kurulumunu (setup) ve yıkımını (teardown) yapmak için kullanılır; böylece her test temiz bir başlangıç yapar.
class CalculatorTest {
lateinit var c: Calculator
@BeforeEach
fun setup() { c = Calculator() }
@AfterEach
fun cleanup() { /* temizle */ }
}Burada her testten önce yeni bir Calculator örneği oluşturulur; testten sonra temizlik yapılır. Bu, testlerin birbirini etkilemesini engeller. lateinit var, kurulumda atanan değişkenler için kullanışlıdır; ilk atama olmadan erişilirse istisra fırlatır.
Kurulum ve yıkım deseni
Ortak kurulum, her testin aynı başlangıç durumuna sahip olmasını sağlar. Örneğin bir veri tabanı bağlantısı, dosya veya liste her testten önce hazırlanır; testten sonra kapatılır veya temizlenir. Bu, testlerin bağımsız ve tekrar edilebilir olmasını sağlar.
@BeforeEach
fun setup() {
counter = 0
}
@Test
fun test1() {
counter++
assertEquals(1, counter)
}Burada counter her testten önce sıfırlanır; böylece test1 ve test2 birbirini etkilemez. Kurulum metodu genellikle setup, yıkım metodu cleanup veya teardown olarak adlandırılır. Ağır kaynaklar (veri tabanı, ağ) için kurulum maliyetini düşünmek önemlidir.
Uygulama beforeEach deseni uygula
class Calculator tanımla; içinde var total: Int = 0 ve fun add(n: Int) { total += n } olsun. Ardından fun beforeEach(c: Calculator) yardımcı fonksiyonu tanımla; gövdesi c.total = 0 yapsın. main içinde val c = Calculator() oluştur; beforeEach(c); c.add(5); check(c.total == 5) çağrısını yap; beforeEach(c); c.add(3); check(c.total == 3) çağrısını yap; println("all passed") yazdır.
Başlangıç kodu
class Calculator {
var total: Int = 0
fun add(n: Int) { total += n }
}
// beforeEach fonksiyonu: Calculator örneğinin total'ini sıfırla
// main: iki "test" yap — her birinden önce beforeEach çağır
// test 1: add(5), check total==5; test 2: add(3), check total==3
// "all passed" yazdır
fun main() {
// buraya yaz
}Örnek çözüm
fun beforeEach(c: Calculator) { c.total = 0 }
fun main() {
val c = Calculator()
beforeEach(c)
c.add(5)
check(c.total == 5)
beforeEach(c)
c.add(3)
check(c.total == 3)
println("all passed")
}Beklenen çıktı
all passed
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 @BeforeEach ne zaman çalışır?
- Tüm testlerden önce bir kez
- Tüm testlerden sonra bir kez
- Her testten sonra
- Her testten önce Doğru cevap
Açıklama: @BeforeEach her test metodundan önce çalışır.
2 Kurulum/yıkım kavramlarını eşle
| Kavram | Anlamı |
|---|---|
@BeforeEach |
Her testten önce |
@AfterEach |
Her testten sonra |
setup() |
Kurulum metodu |
cleanup() |
Yıkım metodu |
3 Kurulum annotasyonu
____
fun setup() { c = Calculator() }
@BeforeEach
fun setup() { c = Calculator() }
Açıklama: @BeforeEach, her testten önce çalışan metodu işaretler.