S'observa que l'estructura de totes les proves és pràcticament la mateixa: només canvien els valors
de les variables.
RockPaperScissorsTest.java
packageud4.methods;importorg.junit.jupiter.api.DisplayName;importorg.junit.jupiter.api.Nested;importorg.junit.jupiter.api.Test;import staticorg.junit.jupiter.api.Assertions.*;classRockPaperScissorsTest{@NestedclassEmpats{@Test@DisplayName("Tisores VS Tisores")voidtisoresVsTisores_shouldReturn0(){// ArrangeStringj1="tisores";Stringj2="tisores";intexpected=0;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}@Test@DisplayName("Pedra VS Pedra")voidpedraVsPedra_shouldReturn0(){// ArrangeStringj1="pedra";Stringj2="pedra";intexpected=0;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}@Test@DisplayName("Paper VS Paper")voidpaperVsPaper_shouldReturn0(){// ArrangeStringj1="paper";Stringj2="paper";intexpected=0;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}}@NestedclassJugador1{@Test@DisplayName("Pedra VS Tisores")voidpedraVsTisores_shouldReturn1(){// ArrangeStringj1="pedra";Stringj2="tisores";intexpected=1;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}@Test@DisplayName("Paper VS Pedra")voidpaperVsPedra_shouldReturn1(){// ArrangeStringj1="paper";Stringj2="pedra";intexpected=1;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}@Test@DisplayName("Tisores VS Paper")voidtisoresVsPaper_shouldReturn1(){// ArrangeStringj1="tisores";Stringj2="paper";intexpected=1;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}}@NestedclassJugador2{@Test@DisplayName("Pedra VS Paper")voidpedraVsPaper_shouldReturn2(){// ArrangeStringj1="pedra";Stringj2="paper";intexpected=2;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}@Test@DisplayName("Paper VS Tisores")voidpaperVsTisores_shouldReturn2(){// ArrangeStringj1="paper";Stringj2="tisores";intexpected=2;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}@Test@DisplayName("Tisores VS Pedra")voidtisoresVsPedra_shouldReturn2(){// ArrangeStringj1="tisores";Stringj2="pedra";intexpected=2;// Actintactual=RockPaperScissors.guanya(j1,j2);// AssertassertEquals(expected,actual);}}}
Amb proves parametritzades, el codi de les proves unitàries es simplifica considerablement:
RockPaperScissorsParametizedTest.java
packageud4.methods;importorg.junit.jupiter.api.DisplayName;importorg.junit.jupiter.params.ParameterizedTest;importorg.junit.jupiter.params.provider.CsvSource;import staticorg.junit.jupiter.api.Assertions.assertEquals;classDebugRockPaperScissorsParametizedTest{@ParameterizedTest(name="\"{0}\" vs \"{1}\" should be {2}")@DisplayName("RockPaperScissors::guanya(j1, j2)")@CsvSource({"pedra,pedra,0","pedra,paper,2","pedra,tisores,1","paper,pedra,1","paper,paper,0","paper,tisores,2","tisores,pedra,2","tisores,paper,1","tisores,tisores,0",})voidtestGuanya(Stringj1,Stringj2,intexpected){intactual=RockPaperScissors.guanya(j1,j2);assertEquals(expected,actual);}}
En l' Exemple: Proves unitàries d'un cotxe s'han creat una sèrie de proves unitàries per comprovar que la classe Car
funciona correctament en diferents escenaris.
CarTest.java
packageud4.objects;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.DisplayName;importorg.junit.jupiter.api.Nested;importorg.junit.jupiter.api.Test;import staticorg.junit.jupiter.api.Assertions.assertAll;import staticorg.junit.jupiter.api.Assertions.assertEquals;classCarTest{publicstaticfinalStringPLATE="0000 BBB";@Nested@DisplayName("Constructor tests")classConstructor{@Test@DisplayName("Crea un cotxe amb matrícula")voidtestPlate(){Carcar=newCar(PLATE);assertAll(()->assertEquals(PLATE,car.getPlate()),()->assertEquals(0,car.getKilometers()),()->assertEquals(0,car.getSpeed()));}@Test@DisplayName("Crea un cotxe amb matrícula i quilòmetres")voidtestPlateAndKilometers(){Carcar=newCar(PLATE,100.0);assertAll(()->assertEquals(PLATE,car.getPlate()),()->assertEquals(100.0,car.getKilometers()),()->assertEquals(0,car.getSpeed()));}@Test@DisplayName("Crea un cotxe amb matrícula, quilòmetres i velocitat")voidtestPlateKilometersAndSpeed(){Carcar=newCar(PLATE,100.0,50);assertAll(()->assertEquals(PLATE,car.getPlate()),()->assertEquals(100.0,car.getKilometers()),()->assertEquals(50,car.getSpeed()));}}@Nested@DisplayName("Car::accelerate(int speed) tests")classAccelerateWithSpeed{privateCarcar;@BeforeEachvoidsetup(){car=newCar(PLATE);}@Test@DisplayName("Car::accelerate(1) increments speed by 1")voidsingleAccelerate(){intexpected=1;car.accelerate(1);intactual=car.getSpeed();assertEquals(expected,actual);}@Test@DisplayName("Car::accelerate(5) increments speed by 5")voidmultipleAccelerate(){intexpected=5;car.accelerate(5);intactual=car.getSpeed();assertEquals(expected,actual);}@Test@DisplayName("Car::accelerate() multiples times increments speed")voidmultipleAccelerateCalls(){intexpected=3;car.accelerate(1);car.accelerate(2);intactual=car.getSpeed();assertEquals(expected,actual);}}@Nested@DisplayName("Car::accelerate() tests")classAccelerateWithoutSpeed{privateCarcar;@BeforeEachvoidsetup(){car=newCar(PLATE);}@Test@DisplayName("Car::accelerate() increments speed by 5")voidaccelerate(){intexpected=5;car.accelerate();intactual=car.getSpeed();assertEquals(expected,actual);}@Test@DisplayName("Car::accelerate() multiples times increments speed")voidmultipleAccelerateCalls(){intexpected=15;car.accelerate();car.accelerate();car.accelerate();intactual=car.getSpeed();assertEquals(expected,actual);}}}
En aquest cas, es poden parametritzar les proves del mètode Car::accelerate():
@DisplayName("Car::accelerate()")@ParameterizedTest(name="{0}x accelerate() should result in speed {1}")@CsvSource({"0, 0","1, 5","3, 15",})voidaccelerateTest(inttimes,intexpectedSpeed){Carcar=newCar("1234ABC");for(inti=0;i<times;i++){car.accelerate();}assertEquals(expectedSpeed,car.getSpeed());}
S'observa que cada fila de @CsvSource indica quantes vegades s'accelera el cotxe i quina velocitat
s'espera obtindre.
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent
a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.