JUnit 5 Nedir? Java Unit Test (Birim Testi) Nasıl Yazılır?
Java'da Unit Test yazmak için projenize JUnit 5 (Jupiter) Maven bağımlılığını ekleyin. Test edilecek sınıfın bir kopyasını oluşturun ve test edilecek metotların başına @Test anotasyonunu koyun. Test çalışmadan önce ön hazırlık yapmak için @BeforeEach kullanın. Son olarak, kodunuzdan dönen sonuç ile beklediğiniz sonucu karşılaştırmak için Assertions.assertEquals(beklenen, gerceklesen) metodunu çağırarak testin geçip geçmediğini doğrulayın.
Bu rehberde JUnit 5 kullanarak Java projelerinde birim testlerin (Unit Test) nasıl yazıldığını, Maven bağımlılığının nasıl eklendiğini ve örnek bir veritabanı (DAO) sınıfı üzerinden test otomasyonunu adım adım inceleyeceğiz.
1. JUnit Nedir ve Neden Kullanılır?
JUnit, Java projelerinde otomatik Birim Testleri (Unit Test) yazmak için kullanılan endüstri standardı bir test framework'üdür. Geliştiriciler manuel testlerde uygulamayı elle tıklayarak test ederken, JUnit ile bu işlemler kodlanabilir, otomatik ve sürekli tekrar edilebilir hale gelir.
JUnit 5 ile en sık kullanılan anotasyonlar şunlardır:
@Test: Altındaki metodun bir test metodu olduğunu sisteme bildirir.@BeforeEach: Her test metodundan hemen önce çalıştırılır (Nesne oluşturmak için idealdir).@AfterEach: Her test metodundan sonra çalıştırılır (Veritabanı bağlantısı kapatmak için idealdir).Assertions.*: Kodun ürettiği sonucun, sizin beklediğiniz sonuçla eşleşip eşleşmediğini doğrular (Örn:assertEquals,assertTrue).
2. JUnit 5 (Jupiter) Maven Bağımlılığı
Modern Java (ve Spring Boot) projelerinde JUnit 5 (Jupiter) standart olarak gelir. Ancak düz bir Java projesi kullanıyorsanız, pom.xml dosyanıza aşağıdaki bağımlılığı (dependency) eklemeniz gerekir:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
Not: Modern Spring Boot projeleri kullanıyorsanız spring-boot-starter-test kütüphanesi JUnit 5'i otomatik olarak içerir.
3. Test Edilecek Kod: Örnek DAO Sınıfı
Test yazabilmek için önce test edilecek bir iş mantığına ihtiyacımız var. Aşağıda veritabanına malzeme ekleyen (INSERT) örnek bir Data Access Object (DAO) metodu bulunmaktadır:
public class MalzemeDao {
private final String INSERT_MALZEME_SQL =
"INSERT INTO malzeme.malzeme (malzeme_adi, durumu, aciklama, adet, marka, garanti_suresi) VALUES(?, ?, ?, ?, ?, ?);";
public boolean insertKayit(Malzeme malzeme) {
try (Connection connection = ConnectDb.baglanDB();
PreparedStatement ps = connection.prepareStatement(INSERT_MALZEME_SQL)) {
ps.setString(1, malzeme.getMalzeme_adi());
ps.setInt(2, malzeme.getDurum());
ps.setString(3, malzeme.getAciklama());
ps.setInt(4, malzeme.getAdet());
ps.setString(5, malzeme.getMarka());
ps.setString(6, malzeme.getGarantiSuresi());
int affectedRows = ps.executeUpdate();
return affectedRows > 0; // Kayıt eklendiyse true döner
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
}
4. JUnit 5 ile Test Sınıfı Yazma
Şimdi yukarıdaki insertKayit metodunun gerçekten çalışıp çalışmadığını test edelim. Modern JUnit 5 API'sini kullanarak testimizi yazıyoruz.
org.junit.Assert.*) yerine, modern JUnit 5 (org.junit.jupiter.api.Assertions.*) importlarını kullandığınızdan emin olun.
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
class MalzemeDaoTest {
private MalzemeDao malzemeDao;
// Her test metodundan önce sınıfı sıfırdan oluşturarak veri çakışmasını önleriz
@BeforeEach
void setUp() {
malzemeDao = new MalzemeDao();
}
@Test
void testInsertKayit_ShouldReturnTrue_WhenDataIsValid() {
// 1. Arrange (Hazırlık) - Test verilerini oluştur
Malzeme data = new Malzeme();
data.setMalzeme_adi("Apple MacBook Pro");
data.setDurum(1);
data.setAciklama("16 inch, M3 Max");
data.setAdet(2);
data.setMarka("Apple");
data.setGarantiSuresi("2026/05/30");
// 2. Act (Eylem) - Test edilecek metodu çağır
boolean isInserted = malzemeDao.insertKayit(data);
// 3. Assert (Doğrulama) - Sonucu kontrol et
assertTrue(isInserted, "Veritabanına kayıt işlemi başarısız oldu!");
// Veya: assertEquals(true, isInserted);
}
}
5. JUnit Testi IDE'de Nasıl Çalıştırılır?
Yazdığınız testi çalıştırmak modern IDE'lerde tek tıka bakar:
- Eclipse: Test sınıfına sağ tıklayın →
Run As→JUnit Test - IntelliJ IDEA: Test metodunun sol tarafındaki yeşil oynatma (Play) butonuna tıklayın.
Test başarıyla çalıştığında IDE içerisinde ünlü "Yeşil Bar" (Green Bar) görünecektir. Eğer test başarısız olursa bar kırmızıya döner ve konsolda hangi değerlerin eşleşmediği (Örn: Beklenen True, Gelen False) detaylı olarak yazılır.
6. Sık Sorulan Sorular
Birim Test (Unit Test) Neden Yazılır?
Birim testleri, kod kalitesini artırır, uygulamanın refactor (yeniden düzenleme) sürecinde kırılmasını engeller ve production (canlı) ortamına hata gitme riskini minimize eder.
JUnit 4 ile JUnit 5 arasındaki fark nedir?
JUnit 5, Java 8 ve sonrasındaki özellikleri (Lambda ifadeleri vb.) destekleyen, çok daha modüler bir mimariye sahip (Jupiter, Platform, Vintage) modern bir framework'tür. Anotasyonları ve Assertions kütüphanesi tamamen yenilenmiştir.
Sonuç
Bu yazıda JUnit 5 kullanarak Java projelerinde birim testlerin (Unit Test) nasıl yazıldığını örnek bir JDBC DAO sınıfı üzerinden inceledik. Test-Driven Development (TDD) veya standart test yazımı sayesinde kodlarınızın güvenilirliğini en üst düzeye çıkarabilirsiniz.
Kodların tamamına erişmek isterseniz açık kaynaklı Java Swing CRUD GitLab Projemizi inceleyebilirsiniz. İyi kodlamalar!