Menu
Coddy logo textTech

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

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

challenge icon

Задание

Легко

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

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

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

class Program
{
    public static void Main(string[] args)
    {
        // TODO: Создать экземпляр BorrowingServiceTests
        
        // TODO: Выполнить каждый метод теста, выводя имя теста перед каждым результатом
        // Пример:
        // Console.WriteLine("BorrowBook_WhenBookAvailable_ReturnsTrue");
        // tests.BorrowBook_WhenBookAvailable_ReturnsTrue();
        
    }
}

Все уроки раздела Объектно-ориентированное программирование