Detta program är en imitation av en hippodrom

Till att börja med, som i föregående projekt, gör dig själv en gaffel från förvaret: https://github.com/CodeGymCC/hippodrome , och klona den här gaffeln själv.

Din uppgift är att lägga till testning och loggning.

Lista över obligatoriska tester

I följande lista måste varje punkt implementeras som en separat testmetod. När du kommer på namn på testmetoder, försök att vara kortfattad, men samtidigt så att du ungefär kan förstå vad exakt som testas i dem. Jämför till exempel dessa två testresultat:

I det andra fallet är det svårare att förstå vilken typ av test som inte klarade, och du måste titta på loggarna.

1. Hästklass:

  1. konstruktör
    • Kontrollera att när den skickas till konstruktorn som den första parametern, IllegalArgumentExceptionkommer att kastas null. För att göra detta, använd metoden assertThrows;
    • Kontrollera att när det skickas till konstruktorn som den första parametern null, kommer det kastade undantaget att innehålla meddelandet "Namn kan inte vara null.". För att göra detta måste du få ett meddelande från det fångade undantaget och använda assertEquals;
    • Kontrollera att när du skickar en tom sträng eller en sträng som bara innehåller blanksteg (mellanslag, tab, etc.) som den första parametern till konstruktorn, kommer . att kastas IllegalArgumentException. För att testa med olika varianter av blankstegstecken måste du göra testet parametriserat;
    • Kontrollera att när du skickar en tom sträng eller en sträng som bara innehåller blanksteg (mellanslag, tab, etc.) till konstruktorn som första parameter, kommer det kastade undantaget att innehålla meddelandet "Namn kan inte vara tomt.";
    • Kontrollera att när ett negativt tal skickas till konstruktorn som den andra parametern, IllegalArgumentException;
    • Kontrollera att när ett negativt tal skickas till konstruktorn som den andra parametern, kommer det kastade undantaget att innehålla meddelandet "Hastighet kan inte vara negativ.";
    • Kontrollera att när ett negativt tal skickas till konstruktorn som den tredje parametern, IllegalArgumentException;
    • Kontrollera att när ett negativt tal skickas som den tredje parametern till konstruktorn, kommer det kastade undantaget att innehålla meddelandet "Avstånd kan inte vara negativt.";
  2. getName-metoden
    • Kontrollera att metoden returnerar strängen som skickades som den första parametern till konstruktorn;
  3. getSpeed-metoden
    • Kontrollera att metoden returnerar numret som skickades som den andra parametern till konstruktorn;
  4. getDistance-metoden
    • Kontrollera att metoden returnerar numret som skickades som den tredje parametern till konstruktorn;
    • Kontrollera att metoden returnerar noll om objektet skapades med en konstruktor med två parametrar;
  5. flytta metod
    • Kontrollera att metoden anropar inuti metoden getRandomDoublemed parametrarna 0.2 och 0.9. För att göra detta måste du använda MockedStaticdess metod verify;
    • Kontrollera att metoden tilldelar avståndsvärdet beräknat med formeln: distance + speed * getRandomDouble(0.2, 0.9). För att göra detta måste du låsa den getRandomDoubleså att den returnerar vissa värden som du behöver ställa in genom att parametrera testet.

2. Hippodromklass:

  1. Konstruktör
    • Kontrollera att när den skickas till konstruktören IllegalArgumentExceptionkommer ; att kastas null;
    • Kontrollera att när det skickas till konstruktorn nullkommer undantaget att innehålla meddelandet "Horses cannot be null.";
    • Kontrollera att när en tom lista skickas till konstruktören, kommer ; att kastas IllegalArgumentException;
    • Kontrollera att när du skickar en tom lista till konstruktören kommer det kastade undantaget att innehålla meddelandet "Hästar kan inte vara tomma.";
  2. getHorses metod
    • Kontrollera att metoden returnerar en lista som innehåller samma objekt och i samma ordning som listan som skickades till konstruktorn. När du skapar Hippodrome- objektet skickar du en lista med 30 olika hästar till konstruktören;
  3. flytta metod
    • Kontrollera att metoden anropar dragmetoden på alla hästar. När du skapar Hippodrome-objektet, skicka en lista med 50 skenhästar till konstruktören och använd verify.
  4. getWinner-metoden
    • Kontrollera att metoden returnerar hästen med störst distansvärde.

3. Huvudklass

  1. huvudmetod
    • Kontrollera att metoden exekveras inte längre än 22 sekunder. För att göra detta, använd Timeout-kommentaren. När du har skrivit det här testet, inaktivera det (använd anteckningen Disabled). Så det tar inte tid att köra alla tester, och om det behövs kan det köras manuellt.

Vad behöver loggas

1. Huvudklass:

  1. När du har skapat hippodromobjektet lägger du till en post så här i loggen:2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
  2. Efter att ha visat information om vinnarna, lägg till en sådan här post i loggen:2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry

Hippodrome klass:

  1. Om null skickades till konstruktorn, lägg till en post så här till loggen innan du kastar undantaget:2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
  2. b. Om en tom lista skickades till konstruktorn, lägg till en post så här till loggen innan du kastar undantaget:2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
  3. I slutet av konstruktorn, lägg till en post så här i loggen:2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses

3. Hästklass:

  1. Om null skickas till konstruktorn istället för ett namn, lägg till en post i loggen innan du kastar undantaget:2022-05-31 17:34:59,483 ERROR Horse: Name is null
  2. Om namnet som skickats till konstruktorn är tomt, lägg till en post så här i loggen innan du kastar undantaget:2022-05-31 17:36:44,196 ERROR Horse: Name is blank
  3. Om hastigheten som skickas till konstruktören är mindre än noll, lägg till en post så här i loggen innan du kastar undantaget:2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
  4. Om avståndet som skickas till konstruktorn är mindre än noll, lägg till en post så här i loggen innan du kastar undantaget:2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
  5. I slutet av konstruktorn, lägg till en post så här i loggen:2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]

Loggar ska skrivas till filen hippodrome.log , som ska finnas i projektroten i logsmappen . Varje dag bör filen döpas om enligt mönstret hippodrome.2021-12-31.log och en ny hippodrome.log ska skapas istället . För att göra detta, använd RollingFile- appendern . I det här fallet bör filer som är äldre än 7 dagar raderas. För att göra detta kan du använda en konstruktion som:

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

Googlade vad som skulle ersättas istället för tre prickar.😊


Projektanalys . Se efter avslutad!