Dette program er en efterligning af en hippodrome
Til at begynde med, som i det forrige projekt, lav dig selv en gaffel fra depotet: https://github.com/CodeGymCC/hippodrome , og klon denne gaffel selv.
Din opgave er at tilføje test og logning.
Liste over nødvendige prøver
I den følgende liste skal hvert element implementeres som en separat testmetode. Når du kommer med navne til testmetoder, så prøv at være kortfattet, men samtidig, så du nogenlunde kan forstå, hvad der præcist bliver testet i dem. Sammenlign for eksempel disse to testresultater:

I det andet tilfælde er det sværere at forstå, hvilken slags test der ikke bestod, og du bliver nødt til at se på loggene.
1. Hesteklasse:
- konstruktør
- Kontroller, at når den sendes til konstruktøren som den første parameter
null
, vil den blive kastetIllegalArgumentException
. For at gøre dette skal du bruge metodenassertThrows
; - Tjek, at når den sendes til konstruktøren som den første parameter
null
, vil den kastede undtagelse indeholde beskeden "Navn kan ikke være null.". For at gøre dette skal du få en besked fra den fangede undtagelse og brugeassertEquals
; - Tjek, at når du sender en tom streng eller en streng, der kun indeholder blanktegn (mellemrum, tabulator, osv.) som den første parameter til konstruktøren, vil . blive kastet
IllegalArgumentException
. For at teste med forskellige varianter af mellemrumstegn skal du gøre testen parametriseret; - Tjek, at når du sender en tom streng eller en streng, der kun indeholder blanktegn (mellemrum, tabulator, osv.) til konstruktøren som den første parameter, vil den kastede undtagelse indeholde beskeden "Navn kan ikke være tomt.";
- Tjek, at når et negativt tal sendes til konstruktøren som den anden parameter,
IllegalArgumentException
; - Tjek, at når et negativt tal sendes til konstruktøren som den anden parameter, vil den kastede undtagelse indeholde beskeden "Hastighed kan ikke være negativ.";
- Tjek, at når et negativt tal sendes til konstruktøren som den tredje parameter,
IllegalArgumentException
; - Tjek, at når du sender et negativt tal som den tredje parameter til konstruktøren, vil den kastede undtagelse indeholde meddelelsen "Afstand kan ikke være negativ.";
- getName-metoden
- Tjek, at metoden returnerer den streng, der blev sendt som den første parameter til konstruktøren;
- getSpeed-metoden
- Tjek, at metoden returnerer det tal, der blev sendt som den anden parameter til konstruktøren;
- getDistance metode
- Tjek, at metoden returnerer det tal, der blev sendt som den tredje parameter til konstruktøren;
- Tjek, at metoden returnerer nul, hvis objektet blev oprettet ved hjælp af en konstruktør med to parametre;
- flytte metode
- Tjek at metoden kalder inde i metoden
getRandomDouble
med parametrene 0.2 og 0.9. For at gøre dette skal du brugeMockedStatic
dens metodeverify
; - Kontroller, at metoden tildeler afstandsværdien beregnet ved formlen:
distance + speed * getRandomDouble(0.2, 0.9)
. For at gøre dette skal du låse den,getRandomDouble
så den returnerer visse værdier, som du skal indstille ved at parametrere testen.
2. Hippodrome klasse:
- Konstruktør
- Tjek, at når det videregives til konstruktøren
null
, vil ; blive kastetIllegalArgumentException
; - Tjek, at når den sendes til konstruktøren
null
, vil den kastede undtagelse indeholde beskeden "Heste kan ikke være null."; - Tjek, at når du sender en tom liste til konstruktøren, vil ; blive kastet
IllegalArgumentException
; - Tjek, at når du sender en tom liste til konstruktøren, vil den kastede undtagelse indeholde beskeden "Heste kan ikke være tomme.";
- getHorses metode
- Tjek, at metoden returnerer en liste, der indeholder de samme objekter og i samme rækkefølge som den liste, der blev sendt til konstruktøren. Når du opretter Hippodrome- objektet , skal du sende en liste med 30 forskellige heste til konstruktøren;
- flytte metode
- Tjek at metoden kalder flyttemetoden på alle heste. Når du opretter Hippodrome-objektet, skal du sende en liste med 50 falske heste til konstruktøren og bruge
verify
. - getWinner-metoden
- Tjek at metoden returnerer hesten med den største afstandsværdi.
3. Hovedklasse
- hovedmetode
- Kontroller, at metoden ikke udføres længere end 22 sekunder. For at gøre dette skal du bruge Timeout-anmærkningen. Når du har skrevet denne test, skal du deaktivere den (brug annotationen Deaktiveret). Så det vil ikke tage tid at køre alle testene, og om nødvendigt kan det køres manuelt.
Hvad skal logges
1. Hovedklasse:
- Når du har oprettet hippodrome-objektet, skal du tilføje en post som denne til loggen:
2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
- Når du har vist oplysninger om vinderne, skal du tilføje en post som denne til loggen:
2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry
Hippodrome klasse:
- Hvis null blev videregivet til konstruktøren, før du kaster undtagelsen, skal du tilføje en post som denne til loggen:
2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
- b. Hvis en tom liste blev videregivet til konstruktøren, før du kaster undtagelsen, skal du tilføje en post som denne til loggen:
2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
- I slutningen af konstruktøren skal du tilføje en post som denne til loggen:
2022-05-31 17:05:26,152 DEBUG Hippodrome: Creation Hippodrome, horses [7]
3. Hesteklasse:
- Hvis null sendes til konstruktøren i stedet for et navn, skal du tilføje en post til loggen, før du kaster undtagelsen:
2022-05-31 17:34:59,483 ERROR Horse: Name is null
- Hvis navnet, der er sendt til konstruktøren, er tomt, skal du tilføje en post som denne til loggen, før du kaster undtagelsen:
2022-05-31 17:36:44,196 ERROR Horse: Name is blank
- Hvis hastigheden, der sendes til konstruktøren, er mindre end nul, før du kaster undtagelsen, skal du tilføje en post som denne til loggen:
2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
- Hvis afstanden til konstruktøren er mindre end nul, før du kaster undtagelsen, skal du tilføje en post som denne til loggen:
2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
- I slutningen af konstruktøren skal du tilføje en post som denne til loggen:
2022-05-31 17:15:25,842 DEBUG Horse: Creation Horse, name [Lobster], speed [2.8]
Logs skal skrives til hippodrome.log- filen , som skal være placeret i projektets rod i logs- mappen . Hver dag skal filen omdøbes i henhold til mønsteret hippodrome.2021-12-31.log og en ny hippodrome.log skal oprettes i stedet . For at gøre dette skal du bruge RollingFile- appenderen . I dette tilfælde skal filer, der er ældre end 7 dage, slettes. For at gøre dette kan du bruge en konstruktion som:
<DefaultRolloverStrategy>
<Delete …>
<IfFileName …/>
<IfLastModified …/>
</Delete>
</DefaultRolloverStrategy>
Googlede, hvad der skulle erstattes i stedet for tre prikker.😊
Projektanalyse . Se efter færdiggørelse!
GO TO FULL VERSION