Menu
CoddyTech

ユニットテスト (NUnit/xUnit)

CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 67/70。

challenge icon

チャレンジ

簡単

単体テストを追加して、Library Systemプロジェクトを完成させましょう!テストは、コードが正しく動作し、変更を加えた後も引き続き動作することを確認するために不可欠です。ライブラリシステムの主要な機能を検証する専用のテストファイルを作成します。

既存のプロジェクト構成を引き続き使い、新しいテストファイルを追加します。

  • Book.cs: Id、Title、Author、IsAvailableと、Borrow()およびReturn()メソッドを持つBookクラスはそのままにします。
  • User.cs: 貸出状況の追跡機能、MaxBooks定数、CanBorrow()、および貸出中の本を管理するメソッドを持つUserクラスはそのままにします。
  • Library.cs: 貸出処理、検索メソッド、GetAllBooks()メソッドとGetAllUsers()メソッドを持つLibraryクラスはそのままにします。
  • LibraryTests.cs: これが新しいテストファイルです!ライブラリシステムが正しく動作することを検証するテストクラスを作成します。さまざまな状況を確認し、各テストが成功したか失敗したかを報告するテストメソッドを記述します。
  • Program.cs: テストを実行し、結果を表示するエントリーポイントです。

テストクラスには、次の状況をテストするメソッドを含めてください。

  • TestBookBorrow - 貸出可能な本を借りると成功し、その本の貸出状況が変わることを検証します。
  • TestBookBorrowUnavailable - すでに貸し出されている本を借りようとすると、適切に失敗することを検証します。
  • TestUserBorrowingLimit - ユーザーが3冊を超えて本を借りられないことを検証します。
  • TestBookReturn - 借りた本を正しく返却できることを検証します。
  • TestSearchByAuthor - 著者名で検索すると、該当する本が返されることを検証します。

各テストメソッドは、テストに成功したかどうかを示すboolean値を返す必要があります。すべてのテストを実行して結果を出力する、シンプルなテストランナーを作成してください。

次の入力が与えられます。

  • 実行するテストシナリオの数(1-5。上記のテストに対応)

実行した各テストについて、次の形式で結果を出力してください。

{TestName}: {PASS|FAIL}

すべてのテストが完了したら、次の概要を出力してください。

--- Test Summary ---
Passed: {count}
Failed: {count}
Total: {count}

たとえば、入力が次の場合:

3

出力は次のようになります。

TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
--- Test Summary ---
Passed: 3
Failed: 0
Total: 3

5つすべてのテストを実行する場合の例:

5

出力は次のようになります。

TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
TestBookReturn: PASS
TestSearchByAuthor: PASS
--- Test Summary ---
Passed: 5
Failed: 0
Total: 5

各テストでは、Book、User、Libraryの新しいインスタンスを作成し、テストを分離してください。こうすることで、あるテストの状態が別のテストに影響しなくなります。各テストは、システム内の特定の動作を個別に検証するものだと考えてください。

自分で試してみよう

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // 実行するテストの数を読み取る
            int numTests = Convert.ToInt32(Console.ReadLine());

            // TODO: LibraryTests オブジェクトを作成し、最初の numTests 個のテストを実行する
        }
    }
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: C#オンラインコンパイラ