'Y'

Test Driven Development cu JUnit 5. Partea a treia

Cea de-a treia parte a seriei noastre de articole despre test driven development cu JUnit 5. De data aceasta ne vom uita la cum sa pregatim aplicatia de flight-management pentru a trece la Test Driven Development.

Jan 19, 2021 56

3. Pregatirea aplicatiei de flight-management pentru TDD

Pentru a trece aplicatia la TDD, trebuie mai intai sa acoperim business logic cu teste JUnit 5. Adaugam JUnit 5 dependencies (junit-jupiter-api si junit-jupiter-engine) la fisierul Maven pom.xml.

<dependencies>

   <dependency>

      <groupId>org.junit.jupiter</groupId>

      <artifactId>junit-jupiter-api</artifactId>

      <version>5.6.0</version>

      <scope>test</scope>

   </dependency>

   <dependency>

      <groupId>org.junit.jupiter</groupId>

      <artifactId>junit-jupiter-engine</artifactId>

      <version>5.6.0</version>

      <scope>test</scope>

   </dependency>

</dependencies>


Analizand business logic, ne dam seama ca trebuie sa verificam scenariile prin care adaugam / scoatem pasageri prin intermediul unor teste care acopera doua tipuri de zboruri si doua tipuri de pasageri. Asa ca avem 4 teste in total. Pentru fiecare test, trebuie sa verificam operatiunile de adaugare si eliminare posibile.

Test Driven Development with JUnit 5. Part 3.jpg


Urmam business logic pentru un zbor economy si folosim functionalitatea JUnit 5 nested, deoarece testele sunt similare si pot fi grupate: teste pentru zborurile economy si testele pentru pentru zborurile business.

public class AirportTest {

@DisplayName("Given there is an economy flight") #1
@Nested #1
class EconomyFlightTest { #1

private Flight economyFlight; #2

@BeforeEach #2
void setUp() { #2
economyFlight = new Flight("1", "Economy"); #2
} #2

@Test
public void testEconomyFlightRegularPassenger() {
Passenger mike = new Passenger("Mike", false); #3

assertEquals("1", economyFlight.getId()); #4
assertEquals(true, economyFlight.addPassenger(mike)); #5
assertEquals(1, economyFlight.getPassengersList().size()); #5
assertEquals("Mike", #5
economyFlight.getPassengersList().get(0).getName()); #5

assertEquals(true, economyFlight.removePassenger(mike)); #6
assertEquals(0, economyFlight.getPassengersList().size()); #6
}

@Test
public void testEconomyFlightVipPassenger() {
Passenger james = new Passenger("James", true); #7

assertEquals("1", economyFlight.getId()); #8
assertEquals(true, economyFlight.addPassenger(james)); #9
assertEquals(1, economyFlight.getPassengersList().size()); #9
assertEquals("James", #9
economyFlight.getPassengersList().get(0).getName()); #9

assertEquals(false, economyFlight.removePassenger(james)); #10
assertEquals(1, economyFlight.getPassengersList().size()); #10
}
}
}

In codul de mai sus:

  • Declaram nested test class EconomyFlightTest si o etichetam "Se da un zbor economy " cu ajutorul adnotarii @DisplayName #1.
  • Declaram un zbor economy si il initalizam inainte de executia fiecarui test #2.
  • Atunci cand testam cum functioneaza un zbor economy cu un pasager obisnuit, il creem pe Mike ca pasager obisnuit #3. Apoi, verificam ID-ul zborului #4, daca il putem adauga pe Mike la zborul economy si daca il putem gasi pe Mike pe lista #5, daca il putem scoate pe Mike de la zborul economy si daca Mike este scos din lista #6.
  • Cand testam cum functioneaza un zbor economy cu un pasager VIP, il creem pe James ca pasager VIP #7. Apoi, verificam ID-ul zborului #8, daca il putem adauga pe James la zborul economy si daca il gasim pe James in lista #9, daca il putem scoate pe James de la zborul economy si daca James inca mai este pe lista #10.
  • Urmam business logic pentru un zbor business si il traducem in urmatoarele teste.

public class AirportTest {
[...]

@DisplayName("Given there is a business flight") #1
@Nested #1
class BusinessFlightTest { #1
private Flight businessFlight; #2

@BeforeEach #2
void setUp() { #2
businessFlight = new Flight("2", "Business"); #2
} #2

@Test
public void testBusinessFlightRegularPassenger() {
Passenger mike = new Passenger("Mike", false); #3

assertEquals(false, businessFlight.addPassenger(mike)); #4
assertEquals(0, businessFlight.getPassengersList().size()); #4
assertEquals(false, businessFlight.removePassenger(mike)); #5
assertEquals(0, businessFlight.getPassengersList().size()); #5

}

@Test
public void testBusinessFlightVipPassenger() {
Passenger james = new Passenger("James", true); #6

assertEquals(true, businessFlight.addPassenger(james)); #7
assertEquals(1, businessFlight.getPassengersList().size()); #7
assertEquals(false, businessFlight.removePassenger(james)); #8
assertEquals(1, businessFlight.getPassengersList().size()); #8

}
}
}

In codul de mai sus:

  • Declaram nested test class BusinessFlightTest si o etichetam "Se da un zbor business " cu ajutorul adnotarii @DisplayName #1.
  • Declaram un zbor business si il initializam inainte de executia fiecarui test #2.
  • Cand testam cum functioneaza zborul de business cu un pasager obisnuit, il creem pe Mike ca pasager obisnuit #3. Apoi verificam ca nu il putem adauga pe Mike la zborul business #4 si ca daca incercam sa il scoatem pe Mike de la zborul business nu se intampla nimic #5.
  • Cand testam cum functioneaza zborul de business cu un pasager VIP, il creem pe James ca pasager VIP #6. Apoi, verificam ca il putem adauga pe James la zborul business si ca il gasim pe lista #7. Si ca nu il putem scoate din zborul business si este inca pe lista #8.

Testele functioneaza cu succes.

Am verificat functionalitatea aplicatiei scriind teste pentru toate scenariile care rezulta din business logic. Exist posibilitatea ca in proiectele tale sa incepi sa lucrezi cu o aplicatie care nu are teste si pe care vrei sa o muti la TDD. Inainte de a face ast trebuie sa testezi aplicatia asa cum este.

Vrei sa inveti mai multe despre aceasta tehnologie? Descopera cursurile noastre.

Catalin Tudose
Java and Web Technologies Expert

Daca iti place acest articol, distribuie-l si prietenilor tai!




Mai ai intrebari?
Contacteaza-ne.
Thank you.
Your request has been received.