@BeforeEach ve @AfterEach
- Java kursu
- İleri seviye
- Ders 45/82
- 5 dk
@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
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
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
@BeforeAll
____ void openResource() {
// tek seferlik kurulum
}
@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.