이 프로그램은 경마장을 모방한 것입니다.

먼저 이전 프로젝트에서와 같이 https://github.com/CodeGymCC/hippodrome 리포지토리에서 포크를 만들고 이 포크를 직접 복제합니다.

귀하의 임무는 테스트 및 로깅을 추가하는 것입니다.

필수 테스트 목록

다음 목록에서 각 항목은 별도의 테스트 방법으로 구현되어야 합니다. 테스트 메서드의 이름을 정할 때는 간결하게 하되 동시에 정확히 테스트 중인 항목을 대략적으로 이해할 수 있도록 하십시오. 예를 들어 다음 두 테스트 결과를 비교합니다.

두 번째 경우에는 어떤 종류의 테스트가 통과되지 않았는지 이해하기가 더 어려우며 로그를 확인해야 합니다.

1. 말 클래스:

  1. 건설자
    • 생성자에 첫 번째 매개변수로 전달될 때 가 IllegalArgumentException발생하는지 확인하십시오 null. 이렇게 하려면 다음 방법을 사용하십시오 assertThrows.
    • 생성자에 첫 번째 매개변수로 전달될 때 null발생한 예외에 "이름은 null일 수 없습니다."라는 메시지가 포함되는지 확인합니다. 이렇게 하려면 잡힌 예외에서 메시지를 가져와서 assertEquals;
    • 빈 문자열이나 공백 문자(공백, 탭 등)만 포함된 문자열을 생성자에 첫 번째 매개변수로 전달할 때 .가 발생하는지 확인합니다 IllegalArgumentException. 다양한 공백 문자 변형으로 테스트하려면 테스트를 매개변수화해야 합니다.
    • 빈 문자열 또는 공백 문자(공백, 탭 등)만 포함된 문자열을 생성자에 첫 번째 매개 변수로 전달할 때 발생하는 예외에 "이름은 비워둘 수 없습니다."라는 메시지가 포함되는지 확인합니다.
    • 음수가 생성자에게 두 번째 매개변수로 전달될 때, IllegalArgumentException;
    • 음수가 생성자에 두 번째 매개 변수로 전달되면 발생하는 예외에 "속도는 음수일 수 없습니다."라는 메시지가 포함되는지 확인합니다.
    • 세 번째 매개 변수로 생성자에 음수가 전달되면 IllegalArgumentException;
    • 생성자에 세 번째 매개변수로 음수를 전달할 때 발생하는 예외에 "거리는 음수일 수 없습니다."라는 메시지가 포함되는지 확인합니다.
  2. getName 메서드
    • 메서드가 생성자에 첫 번째 매개 변수로 전달된 문자열을 반환하는지 확인합니다.
  3. getSpeed ​​방법
    • 메서드가 생성자에 두 번째 매개 변수로 전달된 숫자를 반환하는지 확인합니다.
  4. getDistance 메서드
    • 메서드가 생성자에 세 번째 매개 변수로 전달된 숫자를 반환하는지 확인합니다.
    • 매개변수가 두 개인 생성자를 사용하여 개체를 만든 경우 메서드가 0을 반환하는지 확인합니다.
  5. 이동 방법
    • 메서드가 매개변수 0.2 및 0.9를 사용하여 메서드 내에서 호출하는지 확인합니다 getRandomDouble. MockedStatic이렇게 하려면 해당 메서드를 사용해야 합니다 verify.
    • 방법이 다음 공식으로 계산된 거리 값을 지정하는지 확인하십시오 distance + speed * getRandomDouble(0.2, 0.9). 이렇게 하려면 getRandomDouble테스트를 매개변수화하여 설정해야 하는 특정 값을 반환하도록 잠글 필요가 있습니다.

2. 경마장 수업:

  1. 건설자
    • 생성자에 전달될 때 IllegalArgumentException;가 발생하는지 확인합니다 null.
    • 생성자에 전달될 때 null발생한 예외에 "말은 null일 수 없습니다."라는 메시지가 포함되는지 확인합니다.
    • 빈 목록을 생성자에 전달할 때 ;가 발생하는지 확인합니다 IllegalArgumentException.
    • 생성자에 빈 목록을 전달할 때 발생한 예외에 "말은 비어 있을 수 없습니다."라는 메시지가 포함되는지 확인합니다.
  2. getHorses 메서드
    • 메소드가 생성자에게 전달된 목록과 동일한 객체를 포함하는 목록을 동일한 순서로 반환하는지 확인하십시오. Hippodrome 객체를 생성할 때 30마리의 서로 다른 말 목록을 생성자에 전달합니다.
  3. 이동 방법
    • 메소드가 모든 말에서 move 메소드를 호출하는지 확인하십시오. Hippodrome 개체를 만들 때 50마리의 목마 목록을 생성자에 전달하고 verify.
  4. getWinner 메서드
    • 메서드가 거리 값이 가장 큰 말을 반환하는지 확인합니다.

3. 메인 클래스

  1. 주요 방법
    • 메소드가 22초 이하로 실행되는지 확인하십시오. 이렇게 하려면 Timeout 주석을 사용하십시오. 이 테스트를 작성한 후 비활성화합니다(Disabled 주석 사용). 따라서 모든 테스트를 실행하는 데 시간이 걸리지 않으며 필요한 경우 수동으로 실행할 수 있습니다.

기록해야 할 사항

1. 메인 클래스:

  1. 경마장 개체를 만든 후 다음과 같은 항목을 로그에 추가합니다.2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
  2. 우승자에 대한 정보를 표시한 후 다음과 같은 항목을 로그에 추가하십시오.2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry

경마장 수업:

  1. 생성자에 null이 전달된 경우 예외를 발생시키기 전에 다음과 같은 항목을 로그에 추가합니다.2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
  2. 비. 빈 목록이 생성자에 전달된 경우 예외를 throw하기 전에 다음과 같은 항목을 로그에 추가합니다.2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
  3. 생성자 끝에 다음과 같은 항목을 로그에 추가합니다.2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses

3. 말 클래스:

  1. null이 이름 대신 생성자에 전달되면 예외를 발생시키기 전에 다음과 같이 로그에 항목을 추가합니다.2022-05-31 17:34:59,483 ERROR Horse: Name is null
  2. 생성자에 전달된 이름이 비어 있으면 예외를 발생시키기 전에 다음과 같은 항목을 로그에 추가하십시오.2022-05-31 17:36:44,196 ERROR Horse: Name is blank
  3. 생성자에 전달된 속도가 0 미만인 경우 예외를 발생시키기 전에 다음과 같은 항목을 로그에 추가합니다.2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
  4. 생성자에 전달된 거리가 0보다 작으면 예외를 발생시키기 전에 다음과 같은 항목을 로그에 추가합니다.2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
  5. 생성자 끝에 다음과 같은 항목을 로그에 추가합니다.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>

세 개의 점 대신 무엇을 대체할지 구글링했습니다.😊


프로젝트 분석 . 완성 후 시청!