Test Driven Development cu JUnit 5. Partea a treia
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.
19 Jan 2021
762
Other articles
Object-relational Mapping folosind JPA, Hibernate si Spring Data JPA. Persistence cu JPA
Cum sa interogam Kafka Streaming Data?
Procrastinarea. Care sunt avantajele ei?
Object-relational Mapping folosind JPA, Hibernate si Spring Data JPA
Procrastinarea
Cerinte. De ce avem nevoie de ele?
Dezvolta-ti abilitatile cu training-urile noastre
Programarea reactiva Java. Implementari
Testarea software. Intrebari tipice si raspunsuri. Continuare
Testarea software. Intrebari tipice si raspunsuri
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.
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