Test katmanı
- Java kursu
- İleri seviye
- Ders 76/82
- 6 dk
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
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
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
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());
}
}
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 |