Dezvoltare ghidată de teste

Introducere în testarea în Java

Maria Milusheva

Senior Software Engineer

Test-Driven Development

Până acum, am scris teste doar după codul de producție.

  • Test-Driven Development (TDD) este o tehnică de proiectare în care testele ghidează designul
  • TDD presupune scrierea testelor înainte de orice cod de producție

  • De ce să folosim TDD?

Introducere în testarea în Java

Beneficiile TDD

  • Dezvoltarea cu TDD conduce la îndeplinirea mai bună a cerințelor proiectului
  • Verificare instantanee – orice cod scris are deja teste asociate
  • Codificarea bazată pe teste produce cod mai curat și mai bine structurat
Introducere în testarea în Java

Legile 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

1 https://blog.cleancoder.com/uncle-bob/2014/12/17/TheCyclesOfTDD.html
Introducere în testarea în Java

Testarea palindromurilor

  • Să presupunem că dorim să scriem o metodă care verifică dacă un întreg este un palindrom

  • Exemple de întregi palindromici: 12321, 0, 3333

Introducere în testarea în Java

Scrieți mai întâi un test care eșuează

@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.

Introducere în testarea în Java

Scrieți codul minim pentru a trece testul

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.

Introducere în testarea în Java

Scrieți un alt test

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.
}
Introducere în testarea în Java

Implementați metoda

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;
}
Introducere în testarea în Java

Corectarea erorilor cu TDD

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));
}
Introducere în testarea în Java

Corectarea erorilor cu TDD

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

Să exersăm!

Introducere în testarea în Java

Preparing Video For Download...