このプログラムは競馬場を模倣したものです

まず、前のプロジェクトと同様に、リポジトリ https://github.com/CodeGymCC/hippodrome からフォークを作成しこのフォークのクローンを自分で作成します。

あなたのタスクは、テストとログを追加することです。

必要なテストのリスト

次のリストでは、各項目を個別のテスト メソッドとして実装する必要があります。テスト メソッドの名前を考えるときは、簡潔にすると同時に、そのメソッドで正確に何がテストされているかを大まかに理解できるようにしてください。たとえば、次の 2 つのテスト結果を比較します。

2 番目のケースでは、どのようなテストが不合格だったかを理解するのがさらに難しく、ログを確認する必要があります。

1. 馬のクラス:

  1. コンストラクタ
    • 最初のパラメータとしてコンストラクタに渡されたときにIllegalArgumentException、 がスローされることを確認しますnull。これを行うには、メソッドを使用しますassertThrows
    • 最初のパラメーターとしてコンストラクターに渡されたときにnull、スローされた例外に「名前を null にすることはできません。」というメッセージが含まれていることを確認します。これを行うには、キャッチした例外からメッセージを取得し、assertEquals;を使用する必要があります。
    • 空の文字列または空白文字 (スペース、タブなど) のみを含む文字列を最初のパラメーターとしてコンストラクターに渡すと、 . がスローされることを確認しますIllegalArgumentException。空白文字のさまざまなバリアントを使用してテストするには、テストをパラメータ化する必要があります。
    • 空の文字列、または空白文字 (スペース、タブなど) のみを含む文字列を最初のパラメーターとしてコンストラクターに渡すと、スローされる例外に「名前を空白にすることはできません。」というメッセージが含まれることを確認します。
    • 負の数値が 2 番目のパラメーターとしてコンストラクターに渡されるとき、IllegalArgumentException;を確認してください。
    • 負の数値が 2 番目のパラメーターとしてコンストラクターに渡された場合、スローされる例外に「速度を負にすることはできません。」というメッセージが含まれることを確認します。
    • 負の数値が 3 番目のパラメーターとしてコンストラクターに渡されるとき、IllegalArgumentException;を確認してください。
    • 3 番目のパラメーターとして負の数値をコンストラクターに渡すときに、スローされる例外に「距離を負にすることはできません」というメッセージが含まれることを確認します。
  2. getName メソッド
    • メソッドが最初のパラメーターとしてコンストラクターに渡された文字列を返すことを確認します。
  3. getSpeedメソッド
    • メソッドがコンストラクターに 2 番目のパラメーターとして渡された数値を返すことを確認します。
  4. getDistance メソッド
    • メソッドがコンストラクターに 3 番目のパラメーターとして渡された数値を返すことを確認します。
    • オブジェクトが 2 つのパラメーターを持つコンストラクターを使用して作成された場合、メソッドがゼロを返すことを確認します。
  5. 移動メソッド
    • メソッドがメソッド内でgetRandomDoubleパラメータ 0.2 および 0.9 を使用して呼び出していることを確認します。MockedStaticこれを行うには、そのメソッドを使用する必要がありますverify
    • メソッドが次の式で計算された距離値を割り当てていることを確認しますdistance + speed * getRandomDouble(0.2, 0.9)getRandomDoubleこれを行うには、テストをパラメータ化して設定する必要がある特定の値を返すようにロックする必要があります。

2.ヒポドロームクラス:

  1. コンストラクタ
    • コンストラクターに渡されたときにIllegalArgumentException; がスローされることを確認しますnull
    • コンストラクターに渡されるときにnull、スローされる例外に「Horses not be null.」というメッセージが含まれることを確認します。
    • 空のリストをコンストラクターに渡すときに、 ; がスローされることを確認しますIllegalArgumentException
    • 空のリストをコンストラクターに渡すときに、スローされる例外に「Horses can be empty.」というメッセージが含まれることを確認します。
  2. getHorses メソッド
    • メソッドが、コンストラクターに渡されたリストと同じオブジェクトを含むリストを同じ順序で返すことを確認します。Hippodromeオブジェクトを作成するときに、30 頭の異なる馬のリストをコンストラクターに渡します。
  3. 移動メソッド
    • メソッドがすべての馬の move メソッドを呼び出していることを確認します。Hippodrome オブジェクトを作成するときは、50 頭の模擬馬のリストをコンストラクターに渡し、verify.
  4. getWinner メソッド
    • メソッドが最大の距離値を持つ馬を返すことを確認してください。

3. メインクラス

  1. メインメソッド
    • メソッドが 22 秒以内に実行されていることを確認してください。これを行うには、Timeout アノテーションを使用します。このテストを作成した後、それを無効にします (Disabled アノテーションを使用します)。したがって、すべてのテストを実行するのに時間はかかりません。必要に応じて手動で実行できます。

ログに記録する必要があるもの

1. メインクラス:

  1. Hippodrome オブジェクトを作成した後、次のようなエントリをログに追加します。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. b. 空のリストがコンストラクターに渡された場合は、例外をスローする前に、次のようなエントリをログに追加します。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. コンストラクターに渡される速度がゼロ未満の場合は、例外をスローする前に、次のようなエントリをログに追加します。2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
  4. コンストラクターに渡された距離がゼロ未満の場合は、例外をスローする前に、次のようなエントリをログに追加します。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]

ログは、 hippodrome.logファイルに書き込まれる必要があります。このファイルは、 logsフォルダーのプロジェクト ルートに配置されます。毎日、ファイルの名前はhippodrome.2021-12-31.log のパターンに従って変更され、代わりに新しいhippodrome.log が作成される必要があります。これを行うには、RollingFileアペンダを使用します。この場合、7 日より古いファイルは削除する必要があります。これを行うには、次のような構成を使用できます。

<DefaultRolloverStrategy>
    <Delete>
        <IfFileName/>
        <IfLastModified/>
    </Delete>
</DefaultRolloverStrategy>

3 つの点の代わりに何を置き換えるべきかを Google で調べました。😊


プロジェクト分析完成後も見てね!