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:
- konstruktör
- Kontrollera att när den skickas till konstruktorn som den första parametern,
IllegalArgumentException
kommer att kastasnull
. För att göra detta, använd metodenassertThrows
; - 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ändaassertEquals
; - 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.";
- getName-metoden
- Kontrollera att metoden returnerar strängen som skickades som den första parametern till konstruktorn;
- getSpeed-metoden
- Kontrollera att metoden returnerar numret som skickades som den andra parametern till konstruktorn;
- 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;
- flytta metod
- Kontrollera att metoden anropar inuti metoden
getRandomDouble
med parametrarna 0.2 och 0.9. För att göra detta måste du användaMockedStatic
dess metodverify
; - 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 dengetRandomDouble
så att den returnerar vissa värden som du behöver ställa in genom att parametrera testet.
2. Hippodromklass:
- Konstruktör
- Kontrollera att när den skickas till konstruktören
IllegalArgumentException
kommer ; att kastasnull
; - Kontrollera att när det skickas till konstruktorn
null
kommer 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.";
- 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;
- 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
. - getWinner-metoden
- Kontrollera att metoden returnerar hästen med störst distansvärde.
3. Huvudklass
- 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:
- 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
- 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:
- 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
- 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
- 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:
- 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
- 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
- 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
- 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
- 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!
GO TO FULL VERSION