Este programa é uma imitação de um hipódromo
Para começar, como no projeto anterior, crie uma bifurcação do repositório: https://github.com/CodeGymCC/hippodrome , e clone essa bifurcação você mesmo.
Sua tarefa é adicionar testes e registro.
Lista de testes obrigatórios
Na lista a seguir, cada item deve ser implementado como um método de teste separado. Ao criar nomes para métodos de teste, tente ser conciso, mas ao mesmo tempo, para que você possa entender aproximadamente o que exatamente está sendo testado neles. Por exemplo, compare estes dois resultados de teste:
No segundo caso, é mais difícil entender que tipo de teste não passou e você terá que consultar os logs.
1. Classe de cavalo:
- construtor
- Verifique se, quando passado para o construtor como primeiro parâmetro
IllegalArgumentException
, será lançadonull
. Para fazer isso, use o métodoassertThrows
; - Verifique se ao passar para o construtor como o primeiro parâmetro
null
, a exceção lançada conterá a mensagem "Nome não pode ser nulo.". Para fazer isso, você precisa obter uma mensagem da exceção capturada e usar oassertEquals
; - Verifique se ao passar uma string vazia ou uma string contendo apenas caracteres de espaço em branco (espaço, tabulação, etc.) como o primeiro parâmetro para o construtor,
IllegalArgumentException
. Para testar com diferentes variantes de caracteres de espaço em branco, você precisa fazer o teste parametrizado; - Verifique se ao passar uma string vazia ou uma string contendo apenas caracteres de espaço em branco (espaço, tabulação, etc.)
- Verifique se quando um número negativo é passado para o construtor como o segundo parâmetro,
IllegalArgumentException
; - Verifique se quando um número negativo for passado para o construtor como segundo parâmetro, a exceção lançada conterá a mensagem "Velocidade não pode ser negativa.";
- Verifique se quando um número negativo é passado para o construtor como o terceiro parâmetro,
IllegalArgumentException
; - Verifique se ao passar um número negativo como terceiro parâmetro para o construtor, a exceção lançada conterá a mensagem "A distância não pode ser negativa.";
- método getName
- Verifique se o método retorna a string que foi passada como primeiro parâmetro para o construtor;
- método getSpeed
- Verifique se o método retorna o número que foi passado como segundo parâmetro para o construtor;
- método getDistance
- Verifique se o método retorna o número que foi passado como terceiro parâmetro para o construtor;
- Verifique se o método retorna zero se o objeto foi criado usando um construtor com dois parâmetros;
- método de movimento
- Verifique se o método chama dentro do método
getRandomDouble
com os parâmetros 0.2 e 0.9. Para fazer isso, você precisa usarMockedStatic
seu métodoverify
; - Verifique se o método atribui o valor da distância calculado pela fórmula:
distance + speed * getRandomDouble(0.2, 0.9)
. Para fazer isso, você precisa bloqueá-logetRandomDouble
para que ele retorne determinados valores que você precisa definir parametrizando o teste.
2. Classe Hipódromo:
- Construtor
- Verifique se, quando passado para o construtor
IllegalArgumentException
, ;será lançadonull
; - Verifique se ao passar para o construtor
null
, a exceção lançada conterá a mensagem "Cavalos não podem ser nulos."; - Verifique se ao passar uma lista vazia para o construtor, ; será lançado
IllegalArgumentException
; - Verifique se ao passar uma lista vazia para o construtor, a exceção lançada conterá a mensagem "Cavalos não podem estar vazios.";
- método getHorses
- Verifique se o método retorna uma lista que contém os mesmos objetos e na mesma ordem da lista passada ao construtor. Ao criar o objeto Hippodrome , passe uma lista de 30 cavalos diferentes para o construtor;
- método de movimento
- Verifique se o método chama o método move em todos os cavalos. Ao criar o objeto Hippodrome, passe uma lista de 50 cavalos fictícios para o construtor e use o método
verify
. - método getWinner
- Verifique se o método retorna o cavalo com o maior valor de distância.
3. Classe principal
- método principal
- Verifique se o método não é executado por mais de 22 segundos. Para fazer isso, use a anotação Timeout. Depois de escrever este teste, desative-o (use a anotação Disabled). Portanto, não levará tempo para executar todos os testes e, se necessário, poderá ser executado manualmente.
O que precisa ser registrado
1. Classe principal:
- Depois de criar o objeto hipódromo, adicione uma entrada como esta ao log:
2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
- Depois de exibir as informações sobre os vencedores, adicione uma entrada como esta ao log:
2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry
Classe Hipódromo:
- Se null foi passado para o construtor, antes de lançar a exceção, adicione uma entrada como esta ao log:
2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
- b. Se uma lista vazia foi passada para o construtor, antes de lançar a exceção, adicione uma entrada como esta ao log:
2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
- No final do construtor, adicione uma entrada como esta ao log:
2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses
3. Classe de cavalo:
- Se null for passado para o construtor em vez de um nome, antes de lançar a exceção, adicione uma entrada ao log como:
2022-05-31 17:34:59,483 ERROR Horse: Name is null
- Se o nome passado para o construtor estiver vazio, antes de lançar a exceção, adicione uma entrada como esta ao log:
2022-05-31 17:36:44,196 ERROR Horse: Name is blank
- Se a velocidade passada para o construtor for menor que zero, antes de lançar a exceção, adicione uma entrada como esta ao log:
2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
- Se a distância passada para o construtor for menor que zero, antes de lançar a exceção, adicione uma entrada como esta ao log:
2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
- No final do construtor, adicione uma entrada como esta ao log:
2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]
Os logs devem ser gravados no arquivo hippodrome.log , que deve estar localizado na raiz do projeto na pasta logs . Todos os dias o arquivo deve ser renomeado de acordo com o padrão hippodrome.2021-12-31.log e um novo hippodrome.log deve ser criado em seu lugar . Para fazer isso, use o anexador RollingFile . Nesse caso, os arquivos com mais de 7 dias devem ser excluídos. Para fazer isso, você pode usar uma construção como:
<DefaultRolloverStrategy>
<Delete …>
<IfFileName …/>
<IfLastModified …/>
</Delete>
</DefaultRolloverStrategy>
Pesquisou no Google o que substituir em vez de três pontos.😊
Análise de projetos . Assista após a conclusão!
GO TO FULL VERSION