CodeBlanks Logo Icon CodeBlanks

@BeforeEach ve @AfterEach

@BeforeEach ve @AfterEach ile setup öğrenirsin.

@BeforeEach ve @AfterEach

Her test yönteminden önce çalışacak kodu @BeforeEach, sonrasında çalışacak kodu @AfterEach ile işaretlersin. Bu yöntemler ortak kurulum ve temizlik için kullanılır.

import org.junit.jupiter.api.*;

class CartTest {
    List<String> cart;

    @BeforeEach
    void setup() { cart = new ArrayList<>(); }

    @AfterEach
    void cleanup() { cart.clear(); }
}

Böylece her test bağımsız çalışır; önceki testin yan etkisi etkilemez. Kurulum tek yerde toplanır ve tekrar önlenir. Bu, testlerin hızlı ve güvenilir olmasını sağlar.

@BeforeAll ile sınıf düzeyinde kurulum

Ağır kaynaklar (veritabanı bağlantısı, dosya) bir kez açılacaksa @BeforeAll kullanılır. Bu yöntem static olmalıdır; çünkü çerçeve sınıf başına tek bir kez çağırır.

@BeforeAll
static void openDatabase() {
    // bağlantı bir kez açılır
}

@AfterAll
static void closeDatabase() {
    // bağlantı bir kez kapatılır
}

Bu, test süresini kısaltır. Ancak testlerin birbirine bağımlı olmamasına dikkat et; aksi halde sıra değişince hatalar oluşur. Genelde @BeforeEach tercih edilir.

Uygulama Cart testinde @BeforeEach kullan

Bir CartTest sınıfı yaz. List<String> cart alanı tanımla. @BeforeEach ile işaretli setup yönteminde cart = new ArrayList<>() yap. @Test ile testAdd yöntemi yaz; cart.add("apple") çağır ve assertEquals(1, cart.size()) ile doğrula. Bir main metodu ekle, sepete bir öğe ekle ve size() sonucunu yazdır.

Başlangıç kodu

Main.java
import org.junit.jupiter.api.*;
import java.util.*;

// CartTest sınıfını tanımla

// cart alanı, kurulum annotation'ı ile setup, test annotation'ı ile testAdd yaz

// main metodu ekle ve cart.size() sonucunu yazdır

Örnek çözüm

Main.java
import org.junit.jupiter.api.*;
import java.util.*;

class CartTest {
    List<String> cart;

    @BeforeEach
    void setup() {
        cart = new ArrayList<>();
    }

    @Test
    void testAdd() {
        cart.add("apple");
        assertEquals(1, cart.size());
    }

    public static void main(String[] args) {
        CartTest t = new CartTest();
        t.setup();
        t.cart.add("apple");
        System.out.println(t.cart.size());
    }
}

Beklenen çıktı

1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Lifecycle annotation'larını eşleştir

Kavram Anlamı
@BeforeEach Her testten önce
@AfterEach Her testten sonra
@BeforeAll Sınıftan önce (static)
@AfterAll Sınıftan sonra (static)

2 BeforeAll yöntemini tamamla

Soru
@BeforeAll
____ void openResource() {
    // tek seferlik kurulum
}
Cevap
@BeforeAll
static void openResource() {
    // tek seferlik kurulum
}

Açıklama: @BeforeAll yöntemleri static olmalıdır.

3 @BeforeEach ile @BeforeAll arasındaki fark nedir?

  • BeforeEach her testten önce, BeforeAll sınıftan önce çalışır Doğru cevap
  • BeforeAll her testten önce, BeforeEach sınıftan önce çalışır
  • İkisi de aynıdır, sadece adları farklıdır
  • BeforeAll yalnızca hata durumunda çalışır

Açıklama: BeforeEach her testten önce, BeforeAll sınıftan önce (bir kez) çalışır.

İleri seviye bölümündeki tüm dersler