Wprowadzenie do testowania w Javie
Maria Milusheva
Senior Software Engineer
Do tej pory pisaliśmy testy dopiero po napisaniu kodu produkcyjnego.
TDD polega na pisaniu testów przed kodem produkcyjnym
Po co stosować TDD?
1. Należy napisać nieudany test przed napisaniem jakiegokolwiek kodu produkcyjnego
2. Należy napisać możliwie najkrótszy test
3. Nie należy pisać więcej kodu produkcyjnego niż wymaga przejście testu
Stosowanie ich kolejno = jeden cykl TDD
Rozwój odbywa się przez powtarzające się cykle TDD
Załóżmy, że chcemy napisać metodę sprawdzającą, czy liczba całkowita jest palindromem
Przykłady palindromicznych liczb całkowitych: 12321, 0, 3333
@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
int number = 1234;
assertFalse(isPalindrome(number)); // isPalindrome() nie jest jeszcze napisane
}
Test to notatka dla nas samych przypominająca o wymaganiach projektu.
public boolean isPalindrome(int num) {
return false; // Napisz minimalny kod spełniający wymagania testu.
}
Test przechodzi. Możemy przejść do następnego cyklu TDD.
Nowy test – nowe wymaganie dla funkcji:
@Test
public void isPalindrome_PalindromicInt_ReturnsTrue() {
int number = 1234321; // Napisz bardziej złożony przypadek testowy.
assertTrue(isPalindrome(number)); // W tym momencie isPalindrome() nie przejdzie.
}
public boolean isPalindrome(int num) {
int inverted = 0;
while (num != 0) {
// W każdej iteracji pobierz ostatnią cyfrę liczby za pomocą % 10
// i dodaj do inverted * 10.
inverted = inverted * 10 + num % 10;
// Po przetworzeniu ostatniej cyfry odrzuć ją za pomocą / 10.
num = num / 10;
}
return inverted;
}
TDD świetnie nadaje się do naprawiania błędów!
Napisana metoda zwraca true dla number = -121. To jest błąd!
Piszemy test jednostkowy ilustrujący błąd:
@Test
public void isPalindrome_NegativeNumber_ReturnsFalse() {
int number = -121; // Nie jest palindromem, bo -121 to nie to samo co 121-.
assertFalse(isPalindrome(number));
}
public boolean isPalindrome(int num) {
if (num < 0) {
return false; // Dodajemy klauzulę zwracającą false dla wartości ujemnych.
}
int inverted = 0;
while (num != 0) {
inverted = inverted * 10 + num % 10;
num = num / 10;
}
return inverted;
}
Wprowadzenie do testowania w Javie