Introducere în testarea în Java
Maria Milusheva
Senior Software Engineer
Până acum, am scris teste doar după codul de producție.
TDD presupune scrierea testelor înainte de orice cod de producție
De ce să folosim TDD?
1. Trebuie scris un test care eșuează înainte de orice cod de producție
2. Trebuie scris cel mai scurt test posibil
3. Nu trebuie scris mai mult cod de producție decât este necesar pentru a trece testul
Aplicarea acestora în secvență = un ciclu TDD
Dezvoltarea are loc prin cicluri repetate de TDD
Să presupunem că dorim să scriem o metodă care verifică dacă un întreg este un palindrom
Exemple de întregi palindromici: 12321, 0, 3333
@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
int number = 1234;
assertFalse(isPalindrome(number)); // isPalindrome() nu este încă scrisă
}
Un test este ca o notă lăsată pentru noi înșine, care ne reamintește cerințele proiectului.
public boolean isPalindrome(int num) {
return false; // Scrieți codul minim care îndeplinește cerințele testului.
}
Testul trece acum. Putem continua cu următorul ciclu TDD.
Test nou – cerință nouă pentru funcționalitate:
@Test
public void isPalindrome_PalindromicInt_ReturnsTrue() {
int number = 1234321; // Scrieți acum un caz de test mai complex.
assertTrue(isPalindrome(number)); // În acest punct isPalindrome() va eșua.
}
public boolean isPalindrome(int num) {
int inverted = 0;
while (num != 0) {
// La fiecare iterație, extrage ultima cifră cu % 10
// și adaug-o la inverted * 10.
inverted = inverted * 10 + num % 10;
// După procesarea ultimei cifre, elimină-o cu / 10.
num = num / 10;
}
return inverted;
}
TDD este excelent pentru corectarea erorilor!
Metoda scrisă returnează true pentru number = -121. Acesta este un comportament incorect!
Scriem un test unitar pentru a ilustra eroarea:
@Test
public void isPalindrome_NegativeNumber_ReturnsFalse() {
int number = -121; // Nu este palindrom: -121 nu este același cu 121-.
assertFalse(isPalindrome(number));
}
public boolean isPalindrome(int num) {
if (num < 0) {
return false; // Adăugăm o condiție care returnează false pentru valori negative.
}
int inverted = 0;
while (num != 0) {
inverted = inverted * 10 + num % 10;
num = num / 10;
}
return inverted;
}
Introducere în testarea în Java