Menu
CoddyTech

Unit-тестирование (NUnit/xUnit)

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy. Урок 67 из 70.

challenge icon

Задание

Легко

Давайте завершим проект Library System, добавив модульные тесты! Тестирование необходимо, чтобы убедиться, что ваш код работает правильно и продолжает работать при внесении изменений. Вы создадите отдельный файл тестов, который проверяет основные функции вашей библиотечной системы.

Вы продолжите работать с существующей структурой проекта и добавите новый файл тестов:

  • Book.cs: Сохраните класс Book со свойствами Id, Title, Author, IsAvailable и методами Borrow() и Return().
  • User.cs: Сохраните класс User с отслеживанием взятых книг, константой MaxBooks, методом CanBorrow() и методами для управления взятыми книгами.
  • Library.cs: Сохраните класс Library с логикой выдачи книг, методами поиска и методами GetAllBooks() и GetAllUsers().
  • 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#