Zielony test może nie zauważyć błędu
Wydarzenie ma dziesięć miejsc, z czego trzy są zarezerwowane. Pozostało siedem. Test tylko dla tego wejścia nie wykryje implementacji, która błędnie zwraca co najmniej jedno wolne miejsce, nawet gdy wszystkie są zajęte.
Przewidź przed uruchomieniem
Zapisz kompletny przykład jako Seats.java. Z 25 uruchom java Seats.java. Nie potrzebujesz frameworka, bazy ani zależności.
public class Seats {
static int available(int capacity, int reserved) {
if (capacity < 0 || reserved < 0 || reserved > capacity) {
throw new IllegalArgumentException("Invalid counts");
}
return capacity - reserved;
}
static void equal(int expected, int actual) {
if (expected != actual) throw new AssertionError(expected + " != " + actual);
}
public static void main(String[] args) {
equal(7, available(10, 3));
equal(0, available(3, 3));
System.out.println("PASS: ordinary and full-capacity cases");
}
}Wynik to PASS: ordinary and full-capacity cases. Parametry są wejściem , a return przekazuje obliczoną wartość. equal zgłasza błąd, gdy wynik różni się od oczekiwania. Nie potrzeba flagi -ea: przykład jawnie rzuca zamiast używać słowa assert .
Niech test wykryje pomyłkę
Zastąp wyrażenie po return przez Math.max(1, capacity - reserved). Przykład dziesięciu miejsc nadal zwraca siedem. Przypadek pełnego wydarzenia rzuca teraz AssertionError: oczekiwał zera, dostał jeden. Przywróć odejmowanie.
Test jest przydatny, gdy odróżnia regułę od wiarygodnej pomyłki. Nie mierzymy jego wartości liczbą zielonych linii.
Twoja próba
Przed uruchomieniem przewidź available(0, 0) i dopisz oczekiwanie. Następnie osobno wywołaj available(3, 4): ma odrzucić wejście. Zwrócenie zera ukrywałoby błąd danych.
Jutro napisz tę samą regułę dla nieprzeczytanych stron książki bez zaglądania tutaj. Które wejście odróżnia „nic nie pozostało” od „dane są niepoprawne”?
Czego ta próba nie dowodzi
Policzenie miejsc nie rezerwuje miejsca. Dwaj klienci mogą zobaczyć ten sam wynik. Późniejszy zapis w bazie wymaga własnej i ochrony przed konfliktem. Zacznij od funkcji, a potem poznaj tę granicę.
Źródła
SPRAWDŹ SWOJĄ INTUICJĘ

