Menu
CoddyTech

단위 테스트 (NUnit/xUnit)

Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 70개 중 67번째.

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 - 저자로 검색하면 올바른 책이 반환되는지 확인합니다.

각 테스트 메서드는 테스트의 성공 여부를 나타내는 불리언 값을 반환해야 합니다. 모든 테스트를 실행하고 결과를 출력하는 간단한 테스트 러너를 만듭니다.

다음 입력이 주어집니다.

  • 실행할 테스트 시나리오 수(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# 컴파일러