Ten program jest imitacją hipodromu
Na początek, podobnie jak w poprzednim projekcie, zrób sobie widelec z repozytorium: https://github.com/CodeGymCC/hippodrome i sam sklonuj ten widelec.
Twoim zadaniem jest dodanie testowania i rejestrowania.
Lista wymaganych testów
Na poniższej liście każdy element musi zostać zaimplementowany jako oddzielna metoda testowa. Wymyślając nazwy metod testowych, staraj się być zwięzły, ale jednocześnie tak, abyś mógł z grubsza zrozumieć, co dokładnie jest w nich testowane. Na przykład porównaj te dwa wyniki testów:
W drugim przypadku trudniej jest zrozumieć, jakiego rodzaju testy nie przeszły, i będziesz musiał zajrzeć do dzienników.
1. Klasa konia:
- konstruktor
- Sprawdź, czy przekazany do konstruktora jako pierwszy parametr
IllegalArgumentException
, zostanie wyrzuconynull
. W tym celu użyj metodyassertThrows
; - Sprawdź, czy po przekazaniu do konstruktora jako pierwszy parametr
null
zgłoszony wyjątek będzie zawierał komunikat „Nazwa nie może być pusta”. Aby to zrobić, musisz pobrać komunikat z przechwyconego wyjątku i użyć metodyassertEquals
; - Sprawdź, czy przekazując jako pierwszy parametr do konstruktora ciąg znaków pusty lub zawierający tylko białe znaki (spację, tabulator itp.), zostanie rzucony
IllegalArgumentException
. Aby przetestować różne warianty białych znaków, musisz sparametryzować test; - Sprawdź, czy przy przekazywaniu do konstruktora jako pierwszego parametru ciągu pustego lub zawierającego tylko białe znaki (spację, tabulator itp.) zgłoszony wyjątek będzie zawierał komunikat „Nazwa nie może być pusta.”;
- Sprawdź, czy gdy do konstruktora zostanie przekazana liczba ujemna jako drugi parametr,
IllegalArgumentException
; - Sprawdź, czy w przypadku przekazania do konstruktora liczby ujemnej jako drugiego parametru, zgłoszony wyjątek będzie zawierał komunikat „Speed nie może być ujemny.”;
- Sprawdź, czy gdy do konstruktora zostanie przekazana liczba ujemna jako trzeci parametr,
IllegalArgumentException
; - Sprawdź, czy przekazując do konstruktora liczbę ujemną jako trzeci parametr, zgłoszony wyjątek będzie zawierał komunikat „Odległość nie może być ujemna.”;
- metoda getName
- Sprawdź, czy metoda zwraca ciąg, który został przekazany jako pierwszy parametr do konstruktora;
- metoda getSpeed
- Sprawdź, czy metoda zwraca liczbę, która została przekazana jako drugi parametr do konstruktora;
- metoda getDistance
- Sprawdź, czy metoda zwraca liczbę, która została przekazana jako trzeci parametr do konstruktora;
- Sprawdź, czy metoda zwraca zero, jeśli obiekt został utworzony przy użyciu konstruktora z dwoma parametrami;
- metoda ruchu
- Sprawdź, czy metoda wywołuje wewnątrz metody
getRandomDouble
z parametrami 0,2 i 0,9. Aby to zrobić, musisz użyćMockedStatic
jego metodyverify
; - Sprawdź, czy metoda przypisuje wartość odległości obliczoną według wzoru:
distance + speed * getRandomDouble(0.2, 0.9)
. Aby to zrobić, musisz go zablokowaćgetRandomDouble
, aby zwracał określone wartości, które musisz ustawić parametryzując test.
2. Klasa hipodromu:
- Konstruktor
- Sprawdź, czy po przekazaniu do konstruktora
IllegalArgumentException
;zostanie wyrzuconynull
; - Sprawdź, czy po przekazaniu do konstruktora
null
zgłoszony wyjątek będzie zawierał komunikat „Konie nie mogą być puste.”; - Sprawdź, czy przy przekazywaniu pustej listy do konstruktora zostanie wyrzucony
IllegalArgumentException
; - Sprawdź, czy przekazując do konstruktora pustą listę, zgłoszony wyjątek będzie zawierał komunikat „Konie nie mogą być puste.”;
- metoda getHorses
- Sprawdź, czy metoda zwraca listę zawierającą te same obiekty i w tej samej kolejności, co lista przekazana do konstruktora. Tworząc obiekt Hipodrom , przekaż konstruktorowi listę 30 różnych koni;
- metoda ruchu
- Sprawdź, czy metoda wywołuje metodę move na wszystkich koniach. Tworząc obiekt Hipodrom, przekaż konstruktorowi listę 50 symulowanych koni i użyj rozszerzenia
verify
. - metoda getWinner
- Sprawdź, czy metoda zwraca konia o największej wartości odległości.
3. Główna klasa
- główna metoda
- Sprawdź, czy metoda jest wykonywana nie dłużej niż 22 sekundy. Aby to zrobić, użyj adnotacji Timeout. Po napisaniu tego testu wyłącz go (użyj adnotacji Disabled). Dlatego przeprowadzenie wszystkich testów nie zajmie czasu, aw razie potrzeby można je uruchomić ręcznie.
Co trzeba zalogować
1. Klasa główna:
- Po utworzeniu obiektu hipodromu dodaj do logu taki wpis:
2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
- Po wyświetleniu informacji o zwycięzcach dodaj do dziennika taki wpis:
2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry
Klasa hipodromu:
- Jeśli do konstruktora przekazano wartość null, to przed zgłoszeniem wyjątku dodaj do dziennika taki wpis:
2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
- B. Jeśli do konstruktora została przekazana pusta lista, to przed zgłoszeniem wyjątku dodaj do logu taki wpis:
2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
- Na końcu konstruktora dodaj taki wpis do dziennika:
2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses
3. Klasa konia:
- Jeśli do konstruktora zostanie przekazana wartość null zamiast nazwy, to przed zgłoszeniem wyjątku dodaj wpis do dziennika, taki jak:
2022-05-31 17:34:59,483 ERROR Horse: Name is null
- Jeśli nazwa przekazana do konstruktora jest pusta, to przed rzuceniem wyjątku dodaj do logu taki wpis:
2022-05-31 17:36:44,196 ERROR Horse: Name is blank
- Jeśli prędkość przekazana do konstruktora jest mniejsza od zera, to przed zgłoszeniem wyjątku dodaj do logu taki wpis:
2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
- Jeśli odległość przekazana do konstruktora jest mniejsza od zera, to przed zgłoszeniem wyjątku dodaj do logu taki wpis:
2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
- Na końcu konstruktora dodaj taki wpis do dziennika:
2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]
Logi należy zapisywać do pliku hippodrome.log , który powinien znajdować się w katalogu głównym projektu w folderze logs . Codziennie należy zmieniać nazwę pliku zgodnie ze wzorcem hippodrome.2021-12-31.log i zamiast tego tworzyć nowy plik hippodrome.log . Aby to zrobić, użyj aplikacji RollingFile . W takim przypadku należy usunąć pliki starsze niż 7 dni. Aby to zrobić, możesz użyć konstrukcji takiej jak:
<DefaultRolloverStrategy>
<Delete …>
<IfFileName …/>
<IfLastModified …/>
</Delete>
</DefaultRolloverStrategy>
Wyszukałem w Google, co zastąpić zamiast trzech kropek.😊
Analiza projektu . Oglądaj po zakończeniu!
GO TO FULL VERSION