accelerate(): Incrementa la velocitat del cotxe en 5 km/h.
accelerate(int speed): Incrementa la velocitat del cotxe en la quantitat especificada.
drive(): Incrementa els quilòmetres recorreguts pel cotxe durant 1 segon, segons a la seua velocitat actual.
drive(int seconds): Incrementa els quilòmetres recorreguts pel cotxe durant la quantitat de segons especificada, segons a la seua velocitat actual.
Car.java
packageud4.examples.objects;/** * Classe que representa un cotxe. * @author Joan Puigcerver * @version 1.2 2024-01-05 */publicclassCar{/** * Matrícula del cotxe */privatefinalStringplate;/** * Velocitat del cotxe en km/h */privateintspeed;/** * Distància total recorreguda pel cotxe en km */privatedoublekilometers;/** * Crea un cotxe a partir de la matrícula i els * kilòmetres totals recorreguts. La velocitat inicial és 0 km/h. * @param plate Matrícula del cotxe * @param kilometers Kilòmetres recorreguts */publicCar(Stringplate,intkilometers){this.plate=plate;this.kilometers=kilometers;this.speed=0;}/** * Crea un cotxe a partir de la matrícula * Els kilòmetres totals recorreguts inicials és 0 i la velocitat inicial és 0 km/h. * @param plate Matrícula del cotxe */publicCar(Stringplate){this(plate,0);}/** * Obté la matrícula del cotxe * @return Matrícula del cotxe */publicStringgetPlate(){returnplate;}/** * Obté la velocitat actual del cotxe * @return Velocitat del cotxe */publicintgetVelocity(){returnspeed;}/** * Obté els kilòmetres totals recorreguts pel cotxe * @return Kilòmetres recorreguts */publicdoublegetKilometers(){returnkilometers;}/** * Accelera el cotxe en la velocitat especificada * @param speed Velocitat que accelerarà el cotxe */publicvoidaccelerate(intspeed){this.speed+=speed;}/** * Accelera el cotxe en 5 km/h */publicvoidaccelerate(){accelerate(5);}/** * Condueix el cotxe durant els segons especificats. * Aquest mètode actualitza els kilòmetres recorreguts tenint en compte * la velocitat actual. */publicvoiddrive(intseconds){this.kilometers+=(double)speed*seconds/3600.0;}/** * Condueix el cotxe durant un minut. * Aquest mètode actualitza els kilòmetres recorreguts tenint en compte * la velocitat actual. * @see Car#drive() */publicvoiddrive(){drive(1);}/** * Retorna una representació de l'objecte en format String * @return Representació del cotxe */@OverridepublicStringtoString(){returnString.format("Car %s: {speed=%d km/h, kilometers=%.2f km",plate,speed,kilometers);}}
S'han realitzat proves unitàries de la classe Car a la classe CarTest,
on s'han seguit els següents criteris:
S'han agrupat les proves relacionades amb cada mètode o constructor
utilitzant classes internes @Nested.
S'ha inicialitzat un objecte diferent per a cada prova perquè
cada prova siga independent de les altres.
Per simplificar aquesta inicialització, s'ha creat un mètode setup()
que s'executa abans de cada prova amb l'anotació @BeforeEach.
CarTest.java
packageud4.examples.objects;importorg.junit.jupiter.api.*;import staticorg.junit.jupiter.api.Assertions.*;classCarTest{@Nested@DisplayName("Constructor tests")classConstructor{@Test@DisplayName("Crea un cotxe amb matrícula")voidtestPlate(){Carcar=newCar("0000 BBB");assertEquals("0000 BBB",car.getPlate());assertEquals(0,car.getKilometers());}@Test@DisplayName("Crea un cotxe amb matrícula i quilòmetres")voidtestPlateAndKilometers(){Carcar=newCar("0000 BBB",100);assertEquals("0000 BBB",car.getPlate());assertEquals(100,car.getKilometers());}}@Nested@DisplayName("Car::accelerate(int speed) tests")classAccelerateWithSpeed{privateCarcar;@BeforeEachvoidsetup(){car=newCar("0000 BBB");}@Test@DisplayName("Car::accelerate(1) increments speed by 1")voidsingleAccelerate(){intexpected=1;car.accelerate(1);intactual=car.getVelocity();assertEquals(expected,actual);}@Test@DisplayName("Car::accelerate(5) increments speed by 5")voidmultipleAccelerate(){intexpected=5;car.accelerate(5);intactual=car.getVelocity();assertEquals(expected,actual);}@Test@DisplayName("Car::accelerate() multiples times increments speed")voidmultipleAccelerateCalls(){intexpected=3;car.accelerate(1);car.accelerate(2);intactual=car.getVelocity();assertEquals(expected,actual);}}@Nested@DisplayName("Car::accelerate() tests")classAccelerateWithoutSpeed{privateCarcar;@BeforeEachvoidsetup(){car=newCar("0000 BBB");}@Test@DisplayName("Car::accelerate() increments speed by 5")voidaccelerate(){intexpected=5;car.accelerate();intactual=car.getVelocity();assertEquals(expected,actual);}@Test@DisplayName("Car::accelerate() multiples times increments speed")voidmultipleAccelerateCalls(){intexpected=15;car.accelerate();car.accelerate();car.accelerate();intactual=car.getVelocity();assertEquals(expected,actual);}}}