이 프로그램은 경마장을 모방한 것입니다.
먼저 이전 프로젝트에서와 같이 https://github.com/CodeGymCC/hippodrome 리포지토리에서 포크를 만들고 이 포크를 직접 복제합니다.
귀하의 임무는 테스트 및 로깅을 추가하는 것입니다.
필수 테스트 목록
다음 목록에서 각 항목은 별도의 테스트 방법으로 구현되어야 합니다. 테스트 메서드의 이름을 정할 때는 간결하게 하되 동시에 정확히 테스트 중인 항목을 대략적으로 이해할 수 있도록 하십시오. 예를 들어 다음 두 테스트 결과를 비교합니다.
두 번째 경우에는 어떤 종류의 테스트가 통과되지 않았는지 이해하기가 더 어려우며 로그를 확인해야 합니다.
1. 말 클래스:
- 건설자
- 생성자에 첫 번째 매개변수로 전달될 때 가
IllegalArgumentException
발생하는지 확인하십시오null
. 이렇게 하려면 다음 방법을 사용하십시오assertThrows
. - 생성자에 첫 번째 매개변수로 전달될 때
null
발생한 예외에 "이름은 null일 수 없습니다."라는 메시지가 포함되는지 확인합니다. 이렇게 하려면 잡힌 예외에서 메시지를 가져와서assertEquals
; - 빈 문자열이나 공백 문자(공백, 탭 등)만 포함된 문자열을 생성자에 첫 번째 매개변수로 전달할 때 .가 발생하는지 확인합니다
IllegalArgumentException
. 다양한 공백 문자 변형으로 테스트하려면 테스트를 매개변수화해야 합니다. - 빈 문자열 또는 공백 문자(공백, 탭 등)만 포함된 문자열을 생성자에 첫 번째 매개 변수로 전달할 때 발생하는 예외에 "이름은 비워둘 수 없습니다."라는 메시지가 포함되는지 확인합니다.
- 음수가 생성자에게 두 번째 매개변수로 전달될 때,
IllegalArgumentException
; - 음수가 생성자에 두 번째 매개 변수로 전달되면 발생하는 예외에 "속도는 음수일 수 없습니다."라는 메시지가 포함되는지 확인합니다.
- 세 번째 매개 변수로 생성자에 음수가 전달되면
IllegalArgumentException
; - 생성자에 세 번째 매개변수로 음수를 전달할 때 발생하는 예외에 "거리는 음수일 수 없습니다."라는 메시지가 포함되는지 확인합니다.
- getName 메서드
- 메서드가 생성자에 첫 번째 매개 변수로 전달된 문자열을 반환하는지 확인합니다.
- getSpeed 방법
- 메서드가 생성자에 두 번째 매개 변수로 전달된 숫자를 반환하는지 확인합니다.
- getDistance 메서드
- 메서드가 생성자에 세 번째 매개 변수로 전달된 숫자를 반환하는지 확인합니다.
- 매개변수가 두 개인 생성자를 사용하여 개체를 만든 경우 메서드가 0을 반환하는지 확인합니다.
- 이동 방법
- 메서드가 매개변수 0.2 및 0.9를 사용하여 메서드 내에서 호출하는지 확인합니다
getRandomDouble
.MockedStatic
이렇게 하려면 해당 메서드를 사용해야 합니다verify
. - 방법이 다음 공식으로 계산된 거리 값을 지정하는지 확인하십시오
distance + speed * getRandomDouble(0.2, 0.9)
. 이렇게 하려면getRandomDouble
테스트를 매개변수화하여 설정해야 하는 특정 값을 반환하도록 잠글 필요가 있습니다.
2. 경마장 수업:
- 건설자
- 생성자에 전달될 때
IllegalArgumentException
;가 발생하는지 확인합니다null
. - 생성자에 전달될 때
null
발생한 예외에 "말은 null일 수 없습니다."라는 메시지가 포함되는지 확인합니다. - 빈 목록을 생성자에 전달할 때 ;가 발생하는지 확인합니다
IllegalArgumentException
. - 생성자에 빈 목록을 전달할 때 발생한 예외에 "말은 비어 있을 수 없습니다."라는 메시지가 포함되는지 확인합니다.
- getHorses 메서드
- 메소드가 생성자에게 전달된 목록과 동일한 객체를 포함하는 목록을 동일한 순서로 반환하는지 확인하십시오. Hippodrome 객체를 생성할 때 30마리의 서로 다른 말 목록을 생성자에 전달합니다.
- 이동 방법
- 메소드가 모든 말에서 move 메소드를 호출하는지 확인하십시오. Hippodrome 개체를 만들 때 50마리의 목마 목록을 생성자에 전달하고
verify
. - getWinner 메서드
- 메서드가 거리 값이 가장 큰 말을 반환하는지 확인합니다.
3. 메인 클래스
- 주요 방법
- 메소드가 22초 이하로 실행되는지 확인하십시오. 이렇게 하려면 Timeout 주석을 사용하십시오. 이 테스트를 작성한 후 비활성화합니다(Disabled 주석 사용). 따라서 모든 테스트를 실행하는 데 시간이 걸리지 않으며 필요한 경우 수동으로 실행할 수 있습니다.
기록해야 할 사항
1. 메인 클래스:
- 경마장 개체를 만든 후 다음과 같은 항목을 로그에 추가합니다.
2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
- 우승자에 대한 정보를 표시한 후 다음과 같은 항목을 로그에 추가하십시오.
2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry
경마장 수업:
- 생성자에 null이 전달된 경우 예외를 발생시키기 전에 다음과 같은 항목을 로그에 추가합니다.
2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
- 비. 빈 목록이 생성자에 전달된 경우 예외를 throw하기 전에 다음과 같은 항목을 로그에 추가합니다.
2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
- 생성자 끝에 다음과 같은 항목을 로그에 추가합니다.
2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses
3. 말 클래스:
- null이 이름 대신 생성자에 전달되면 예외를 발생시키기 전에 다음과 같이 로그에 항목을 추가합니다.
2022-05-31 17:34:59,483 ERROR Horse: Name is null
- 생성자에 전달된 이름이 비어 있으면 예외를 발생시키기 전에 다음과 같은 항목을 로그에 추가하십시오.
2022-05-31 17:36:44,196 ERROR Horse: Name is blank
- 생성자에 전달된 속도가 0 미만인 경우 예외를 발생시키기 전에 다음과 같은 항목을 로그에 추가합니다.
2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
- 생성자에 전달된 거리가 0보다 작으면 예외를 발생시키기 전에 다음과 같은 항목을 로그에 추가합니다.
2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
- 생성자 끝에 다음과 같은 항목을 로그에 추가합니다.
2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]
로그는 프로젝트 루트의 logs 폴더 에 있는 hippodrome.log 파일 에 기록되어야 합니다 . 매일 파일 이름은 hippodrome.2021-12-31.log 패턴에 따라 변경되어야 하며 대신 새로운 hippodrome.log가 생성되어야 합니다 . 이렇게 하려면 RollingFile 어펜더를 사용하십시오 . 이 경우 7일이 지난 파일은 삭제해야 합니다. 이렇게 하려면 다음과 같은 구성을 사용할 수 있습니다.
<DefaultRolloverStrategy>
<Delete …>
<IfFileName …/>
<IfLastModified …/>
</Delete>
</DefaultRolloverStrategy>
세 개의 점 대신 무엇을 대체할지 구글링했습니다.😊
프로젝트 분석 . 완성 후 시청!
GO TO FULL VERSION