Menu
Coddy logo textTech

단위 테스트 (NUnit/xUnit)

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

challenge icon

챌린지

쉬움

단위 테스트를 추가하여 도서관 시스템 프로젝트를 완성해 봅시다! 테스트는 코드가 올바르게 작동하고 변경 사항이 발생하더라도 계속해서 잘 작동하는지 확인하는 데 필수적입니다. 도서관 시스템의 핵심 기능을 검증하는 전용 테스트 파일을 만들 것입니다.

기존 프로젝트 구조를 계속 사용하면서 새로운 테스트 파일을 추가하게 됩니다:

  • 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;
using Library.Tests;

class Program
{
    public static void Main(string[] args)
    {
        // TODO: BorrowingServiceTests 인스턴스를 생성하세요
        
        // TODO: 각 테스트 메서드를 실행하고, 각 결과 전에 테스트 이름을 출력하세요
        // 예시:
        // Console.WriteLine("BorrowBook_WhenBookAvailable_ReturnsTrue");
        // tests.BorrowBook_WhenBookAvailable_ReturnsTrue();
        
    }
}

객체 지향 프로그래밍의 모든 레슨