CodeBlanks Logo Icon CodeBlanks

Test katmanı

JUnit ve Mockito ile test yazarısn.

LedgerService ve test

Bu derste LedgerService sınıfını ve onun birim testini yazacaksın. Service, kayıt eklemeyi ve saymayı sagliyan ince bir katmandır.

class LedgerService {
    ArrayList<Transaction> ledger = new ArrayList<>();
    void add(Transaction t) { ledger.add(t); }
    int getCount() { return ledger.size(); }
}

Test sınıfı LedgerServiceTest, bir kayıt ekleyip getCount() değerini assertEquals(1, ...) ile doğrular. Bu, uygulamaya güvenilir bir test katmanı ekler.

assertEquals ile doğrulama

assertEquals(expected, actual) beklenen ve gerçek değeri karşılaştırır. Eşitse test geçer; değilse istisna fırlatır ve test başarısız olur. Bu, birim testlerin temel doğrulama aracıdır.

@Test
void testGetCount() {
    LedgerService s = new LedgerService();
    s.add(new Transaction("market", 120));
    assertEquals(1, s.getCount());
}

Burada bir kayıt ekledikten sonra getCount() 1 döndürmeli. Ilk argüman beklenen, ikincisi gerçek değerdir. Testlerin main yerine ayrı sınıfta olması, üretim kodunu temiz tutar.

Uygulama LedgerServiceTest yaz

LedgerServiceTest sınıfı tanımla. @Test ile işaretli testGetCount yöntemi yaz; bir kayıt ekle ve assertEquals(1, s.getCount()) çağır. Main sınıfında bir LedgerService oluştur, iki kayıt ekle ve service.getCount() sonucunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
import java.util.ArrayList;
import java.util.concurrent.*;

class Transaction {
    String category;
    int amount;
    Transaction(String category, int amount) {
        this.category = category;
        this.amount = amount;
    }
}

class LedgerService {
    ArrayList<Transaction> ledger = new ArrayList<>();
    void add(Transaction t) { ledger.add(t); }
    int getCount() { return ledger.size(); }
}

public class Main {
    public static void main(String[] args) throws Exception {
        LedgerService service = new LedgerService();
        service.add(new Transaction("market", 120));
        service.add(new Transaction("fuel", 80));
        // Test sınıfını çağır ve getCount sonucunu yazdır
    }
}

Örnek çözüm

Main.java
import java.util.ArrayList;
import java.util.concurrent.*;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class Transaction {
    String category;
    int amount;
    Transaction(String category, int amount) {
        this.category = category;
        this.amount = amount;
    }
}

class LedgerService {
    ArrayList<Transaction> ledger = new ArrayList<>();
    void add(Transaction t) { ledger.add(t); }
    int getCount() { return ledger.size(); }
}

class LedgerServiceTest {
    @Test
    void testGetCount() {
        LedgerService s = new LedgerService();
        s.add(new Transaction("market", 120));
        assertEquals(1, s.getCount());
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        LedgerService service = new LedgerService();
        service.add(new Transaction("market", 120));
        service.add(new Transaction("fuel", 80));
        System.out.println(service.getCount());
    }
}

Beklenen çıktı

2

Soru ve cevaplar

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

1 @Test annotation'ini tamamla

Soru
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class LedgerServiceTest {
    ____
    void testGetCount() {
        LedgerService s = new LedgerService();
        s.add(new Transaction("market", 120));
        assertEquals(1, s.getCount());
    }
}
Cevap
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class LedgerServiceTest {
    @Test
    void testGetCount() {
        LedgerService s = new LedgerService();
        s.add(new Transaction("market", 120));
        assertEquals(1, s.getCount());
    }
}

Açıklama: @Test ile işaretlenen yöntem bir test olarak çalışır.

2 assertEquals(1, s.getCount()) ne zaman başarısız olur?

  • @Test yoksa
  • Sınıf derlendiginde
  • main yoksa
  • getCount() 1 dondurdugunde değilse Doğru cevap

Açıklama: getCount() 1 dışında bir değer döndürürse assertion başarısız olur.

3 Test kavramlarını eşleştir

Kavram Anlamı
LedgerService Ekler ve sayar
LedgerServiceTest Test sınıfı
@Test Test yöntemi işareti
assertEquals Değer doğrulama

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