Úvod do testování v Javě
Maria Milusheva
Senior Software Engineer
Dosud jsme psali testy až po napsání produkčního kódu.
TDD spočívá v psaní testů před jakýmkoli produkčním kódem
Proč používat TDD?
1. Před napsáním jakéhokoli produkčního kódu musíte napsat neúspěšný test
2. Musíte napsat co nejkratší test
3. Nesmíte napsat více produkčního kódu, než je nutné k splnění testu
Aplikování v pořadí = jeden cyklus TDD
Vývoj probíhá opakovanými cykly TDD
Předpokládejme, že chceme napsat metodu, která zjistí, zda je celé číslo palindromem
Příklady palindromních celých čísel: 12321, 0, 3333
@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
int number = 1234;
assertFalse(isPalindrome(number)); // isPalindrome() ještě není napsána
}
Test je jako poznámka pro naše budoucí já, která nám připomíná požadavky projektu.
public boolean isPalindrome(int num) {
return false; // Napište minimální kód splňující požadavky testu.
}
Test nyní prochází. Můžeme přejít k dalšímu cyklu TDD.
Nový test – nový požadavek na funkci:
@Test
public void isPalindrome_PalindromicInt_ReturnsTrue() {
int number = 1234321; // Nyní napište složitější testovací případ.
assertTrue(isPalindrome(number)); // V tomto bodě isPalindrome() selže.
}
public boolean isPalindrome(int num) {
int inverted = 0;
while (num != 0) {
// V každé iteraci vezměte poslední číslici pomocí % 10
// a přidejte ji k inverted * 10.
inverted = inverted * 10 + num % 10;
// Po zpracování poslední číslice ji odstraňte pomocí / 10.
num = num / 10;
}
return inverted;
}
TDD se skvěle hodí pro opravy chyb!
Metoda, kterou jsme napsali, vrací true pro number = -121. To není správně!
Napíšeme unit test pro popis chyby:
@Test
public void isPalindrome_NegativeNumber_ReturnsFalse() {
int number = -121; // Není palindrom, protože -121 není totéž jako 121-.
assertFalse(isPalindrome(number));
}
public boolean isPalindrome(int num) {
if (num < 0) {
return false; // Přidáme podmínku pro vrácení false u záporných hodnot.
}
int inverted = 0;
while (num != 0) {
inverted = inverted * 10 + num % 10;
num = num / 10;
}
return inverted;
}
Úvod do testování v Javě