Questo programma è un'imitazione di un ippodromo
Per cominciare, come nel progetto precedente, crea un fork dal repository: https://github.com/CodeGymCC/hippodrome e clona tu stesso questo fork.
Il tuo compito è aggiungere test e registrazione.
Elenco dei test richiesti
Nell'elenco seguente, ogni elemento deve essere implementato come metodo di test separato. Quando ti vengono in mente i nomi per i metodi di test, cerca di essere conciso, ma allo stesso tempo, in modo da poter capire approssimativamente cosa viene testato esattamente in essi. Ad esempio, confronta i risultati di questi due test:
Nel secondo caso, è più difficile capire che tipo di test non sono stati superati e dovrai guardare i registri.
1. Classe di cavalli:
- costruttore
- Verificare che quando viene passato al costruttore come primo parametro
IllegalArgumentException
, verrà lanciatonull
. Per fare questo, usa il metodoassertThrows
; - Verificare che quando viene passato al costruttore come primo parametro
null
, l'eccezione generata conterrà il messaggio "Il nome non può essere nullo.". Per fare ciò, è necessario ottenere un messaggio dall'eccezione rilevata e utilizzare ilassertEquals
; - Verificare che quando si passa una stringa vuota o una stringa contenente solo spazi bianchi (spazio, tabulazione, ecc.) come primo parametro al costruttore, verrà generato
IllegalArgumentException
. Per eseguire il test con diverse varianti di spazi bianchi, è necessario rendere il test parametrizzato; - Verificare che quando si passa una stringa vuota o una stringa contenente solo spazi bianchi (spazio, tabulazione, ecc.) al costruttore come primo parametro, l'eccezione generata conterrà il messaggio "Il nome non può essere vuoto.";
- Verifica che quando un numero negativo viene passato al costruttore come secondo parametro,
IllegalArgumentException
; - Verifica che quando un numero negativo viene passato al costruttore come secondo parametro, l'eccezione generata conterrà il messaggio "La velocità non può essere negativa.";
- Verifica che quando un numero negativo viene passato al costruttore come terzo parametro,
IllegalArgumentException
; - Verificare che quando si passa un numero negativo come terzo parametro al costruttore, l'eccezione generata conterrà il messaggio "La distanza non può essere negativa.";
- metodo getName
- Verificare che il metodo restituisca la stringa passata come primo parametro al costruttore;
- metodo getSpeed
- Verificare che il metodo restituisca il numero che è stato passato come secondo parametro al costruttore;
- metodo getDistanza
- Verificare che il metodo restituisca il numero che è stato passato come terzo parametro al costruttore;
- Verificare che il metodo restituisca zero se l'oggetto è stato creato utilizzando un costruttore con due parametri;
- metodo di spostamento
- Verificare che il metodo chiami all'interno del metodo
getRandomDouble
con i parametri 0.2 e 0.9. Per fare ciò, devi usareMockedStatic
il suo metodoverify
; - Verificare che il metodo assegni il valore della distanza calcolato dalla formula:
distance + speed * getRandomDouble(0.2, 0.9)
. Per fare ciò, è necessario bloccarlogetRandomDouble
in modo che restituisca determinati valori che è necessario impostare parametrizzando il test.
2. Classe dell'ippodromo:
- Costruttore
- Controlla che quando viene passato al costruttore
IllegalArgumentException
, ; verrà lanciatonull
; - Controlla che quando viene passato al costruttore
null
, l'eccezione generata conterrà il messaggio "Horses cannot be null."; - Controlla che quando passi una lista vuota al costruttore, ; verrà lanciato
IllegalArgumentException
; - Controlla che quando passi una lista vuota al costruttore, l'eccezione generata conterrà il messaggio "I cavalli non possono essere vuoti.";
- metodo getHorses
- Verificare che il metodo restituisca un elenco che contiene gli stessi oggetti e nello stesso ordine dell'elenco passato al costruttore. Durante la creazione dell'oggetto Ippodromo , passare al costruttore un elenco di 30 diversi cavalli;
- metodo di spostamento
- Verifica che il metodo chiami il metodo move su tutti i cavalli. Quando crei l'oggetto Ippodromo, passa un elenco di 50 finti cavalli al costruttore e usa l'estensione
verify
. - metodo getWinner
- Verificare che il metodo restituisca il cavallo con il valore di distanza maggiore.
3. Classe principale
- metodo principale
- Verificare che il metodo venga eseguito per non più di 22 secondi. Per fare ciò, utilizzare l'annotazione Timeout. Dopo aver scritto questo test, disabilitalo (usa l'annotazione Disabled). Quindi non ci vorrà tempo per eseguire tutti i test e, se necessario, può essere eseguito manualmente.
Cosa deve essere registrato
1. Classe principale:
- Dopo aver creato l'oggetto ippodromo, aggiungi una voce come questa al registro:
2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
- Dopo aver visualizzato le informazioni sui vincitori, aggiungi una voce come questa al registro:
2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry
Classe dell'ippodromo:
- Se null è stato passato al costruttore, prima di lanciare l'eccezione, aggiungi una voce come questa al registro:
2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
- B. Se al costruttore è stato passato un elenco vuoto, prima di lanciare l'eccezione, aggiungi una voce come questa al registro:
2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
- Alla fine del costruttore, aggiungi una voce come questa al registro:
2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses
3. Classe di cavalli:
- Se null viene passato al costruttore invece di un nome, prima di lanciare l'eccezione, aggiungi una voce al registro come:
2022-05-31 17:34:59,483 ERROR Horse: Name is null
- Se il nome passato al costruttore è vuoto, prima di lanciare l'eccezione, aggiungi una voce come questa al registro:
2022-05-31 17:36:44,196 ERROR Horse: Name is blank
- Se la velocità passata al costruttore è inferiore a zero, prima di lanciare l'eccezione, aggiungi una voce come questa al registro:
2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
- Se la distanza passata al costruttore è minore di zero, prima di lanciare l'eccezione, aggiungi una voce come questa al log:
2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
- Alla fine del costruttore, aggiungi una voce come questa al registro:
2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]
I log dovrebbero essere scritti nel file hippodrome.log , che dovrebbe trovarsi nella root del progetto nella cartella logs . Ogni giorno il file dovrebbe essere rinominato secondo lo schema hippodrome.2021-12-31.log e dovrebbe essere creato invece un nuovo hippodrome.log . Per fare ciò, utilizzare l' appender RollingFile . In questo caso, i file più vecchi di 7 giorni devono essere eliminati. Per fare ciò, puoi usare un costrutto come:
<DefaultRolloverStrategy>
<Delete …>
<IfFileName …/>
<IfLastModified …/>
</Delete>
</DefaultRolloverStrategy>
Ho cercato su Google cosa sostituire invece di tre punti.😊
Analisi del progetto . Guarda dopo il completamento!
GO TO FULL VERSION