Dette programmet er en imitasjon av en hippodrome

Til å begynne med, som i forrige prosjekt, lag deg selv en gaffel fra depotet: https://github.com/CodeGymCC/hippodrome , og klon denne gaffelen selv.

Din oppgave er å legge til testing og logging.

Liste over nødvendige tester

I den følgende listen må hvert element implementeres som en egen testmetode. Når du kommer opp med navn på testmetoder, prøv å være kortfattet, men samtidig, slik at du grovt sett kan forstå hva som eksakt testes i dem. Sammenlign for eksempel disse to testresultatene:

I det andre tilfellet er det vanskeligere å forstå hva slags tester som ikke besto, og du må se på loggene.

1. Hesteklasse:

  1. konstruktør
    • Sjekk at når den sendes til konstruktøren som den første parameteren IllegalArgumentException, vil den bli kastet null. For å gjøre dette, bruk metoden assertThrows;
    • Sjekk at når det sendes til konstruktøren som den første parameteren null, vil det kastede unntaket inneholde meldingen "Navn kan ikke være null.". For å gjøre dette må du få en melding fra det fangede unntaket og bruke assertEquals;
    • Sjekk at når du sender en tom streng eller en streng som bare inneholder mellomromstegn (mellomrom, tabulator, etc.) som den første parameteren til konstruktøren, vil . bli kastet IllegalArgumentException. For å teste med forskjellige varianter av mellomromstegn, må du gjøre testen parameterisert;
    • Sjekk at når du sender en tom streng eller en streng som bare inneholder mellomrom (mellomrom, tabulator, etc.) til konstruktøren som den første parameteren, vil det kastede unntaket inneholde meldingen "Navn kan ikke være tomt.";
    • Sjekk at når et negativt tall sendes til konstruktøren som den andre parameteren, IllegalArgumentException;
    • Sjekk at når et negativt tall sendes til konstruktøren som den andre parameteren, vil det kastede unntaket inneholde meldingen "Hastighet kan ikke være negativ.";
    • Sjekk at når et negativt tall sendes til konstruktøren som tredje parameter, IllegalArgumentException;
    • Sjekk at når du sender et negativt tall som den tredje parameteren til konstruktøren, vil det kastede unntaket inneholde meldingen "Avstand kan ikke være negativ.";
  2. getName-metoden
    • Sjekk at metoden returnerer strengen som ble sendt som den første parameteren til konstruktøren;
  3. getSpeed-metoden
    • Sjekk at metoden returnerer tallet som ble sendt som den andre parameteren til konstruktøren;
  4. getDistance-metoden
    • Sjekk at metoden returnerer tallet som ble sendt som den tredje parameteren til konstruktøren;
    • Sjekk at metoden returnerer null hvis objektet ble opprettet ved hjelp av en konstruktør med to parametere;
  5. flytte metode
    • Sjekk at metoden kaller inn i metoden getRandomDoublemed parameterne 0.2 og 0.9. For å gjøre dette må du bruke MockedStaticmetoden verify;
    • Kontroller at metoden tildeler avstandsverdien beregnet med formelen: distance + speed * getRandomDouble(0.2, 0.9). For å gjøre dette, må du låse den getRandomDoubleslik at den returnerer visse verdier som du må angi ved å parameterisere testen.

2. Hippodrometime:

  1. Konstruktør
    • Sjekk at når den sendes til konstruktøren IllegalArgumentException, vil ; bli kastet null;
    • Sjekk at når det sendes til konstruktøren null, vil unntaket som kastes inneholde meldingen "Hester kan ikke være null.";
    • Sjekk at når du sender en tom liste til konstruktøren, vil ; bli kastet IllegalArgumentException;
    • Sjekk at når du sender en tom liste til konstruktøren, vil det kastede unntaket inneholde meldingen "Hester kan ikke være tomme.";
  2. getHorses metode
    • Sjekk at metoden returnerer en liste som inneholder de samme objektene og i samme rekkefølge som listen som ble sendt til konstruktøren. Når du oppretter Hippodrome- objektet , send en liste med 30 forskjellige hester til konstruktøren;
  3. flytte metode
    • Sjekk at metoden kaller flyttemetoden på alle hester. Når du oppretter Hippodrome-objektet, send en liste med 50 falske hester til konstruktøren og bruk verify.
  4. getWinner-metoden
    • Sjekk at metoden returnerer hesten med størst avstandsverdi.

3. Hovedklasse

  1. hovedmetoden
    • Kontroller at metoden utføres ikke lenger enn 22 sekunder. For å gjøre dette, bruk Tidsavbrudd-kommentaren. Etter å ha skrevet denne testen, deaktiver den (bruk Deaktivert-kommentaren). Så det vil ikke ta tid å kjøre alle testene, og om nødvendig kan det kjøres manuelt.

Hva må logges

1. Hovedklasse:

  1. Etter å ha opprettet hippodrome-objektet, legg til en oppføring som dette i loggen:2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
  2. Etter å ha vist informasjon om vinnerne, legg til en oppføring som dette i loggen:2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry

Hippodrome klasse:

  1. Hvis null ble sendt til konstruktøren, før du kaster unntaket, legg til en oppføring som dette i loggen:2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
  2. b. Hvis en tom liste ble sendt til konstruktøren, før du kaster unntaket, legg til en oppføring som dette i loggen:2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
  3. På slutten av konstruktøren legger du til en oppføring som dette i loggen:2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses

3. Hesteklasse:

  1. Hvis null sendes til konstruktøren i stedet for et navn, før du kaster unntaket, legg til en oppføring i loggen som:2022-05-31 17:34:59,483 ERROR Horse: Name is null
  2. Hvis navnet som ble sendt til konstruktøren er tomt, før du kaster unntaket, legg til en oppføring som dette i loggen:2022-05-31 17:36:44,196 ERROR Horse: Name is blank
  3. Hvis hastigheten som sendes til konstruktøren er mindre enn null, så før du kaster unntaket, legg til en oppføring som dette i loggen:2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
  4. Hvis avstanden som sendes til konstruktøren er mindre enn null, før du kaster unntaket, legg til en oppføring som dette i loggen:2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
  5. På slutten av konstruktøren legger du til en oppføring som dette i loggen:2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]

Logger bør skrives til hippodrome.log- filen , som skal være plassert i prosjektroten i logs- mappen . Hver dag bør filen gis nytt navn i henhold til mønsteret hippodrome.2021-12-31.log og en ny hippodrome.log bør opprettes i stedet . For å gjøre dette, bruk RollingFile- appenderen . I dette tilfellet bør filer som er eldre enn 7 dager slettes. For å gjøre dette kan du bruke en konstruksjon som:

<DefaultRolloverStrategy>
    <Delete>
        <IfFileName/>
        <IfLastModified/>
    </Delete>
</DefaultRolloverStrategy>

Googlet hva som skal erstattes i stedet for tre prikker.😊


Prosjektanalyse . Se etter ferdigstillelse!