В предыдущем уроке я объяснил основы модульного тестирования с помощью xUnit и C#. Этот учебник основан на счастливом потоке и наилучших сценариях. Я говорил об атрибутах Факт и Теория. Обозреватель тестов также был объяснен.

Но в некоторых случаях ваш код может вызвать исключение, из-за чего приложение перестанет работать и закроется. Модульный тест — это своего рода небольшое приложение. Итак, как нам это исправить? Как мы можем обрабатывать исключения? Еще лучше; как мы можем тестировать исключения с помощью xUnit?

Прежде чем мы начнем

… Лучше всего иметь приложение, которое генерирует исключения. Я использовал код из предыдущего урока и кое-что изменил. Вы можете найти код здесь:

https://github.com/KensLearningCurve/ExceptionHandlingWithxUnit

Несколько вещей, чтобы упомянуть:

  1. MyMovies.cs — это класс со всей логикой. Мы создадим тесты для этого класса.
  2. Метод Get(int id) выдает исключение, когда идентификатор равен нулю или меньше.
  3. Метод Delete(int id) генерирует исключение MovieNotFoundException(), которое является пользовательским исключением и находится в папке Exceptions.

Методы, вызывающие исключения, являются известными исключениями. Это означает, что мы знаем, что они будут выброшены, если кто-то использует их неправильно. Мы должны проверить, выбрасываются ли эти исключения в конкретных случаях (нулевой идентификатор меньшего и фильм не найден при попытке что-то удалить).
Известные исключения — это исключения, которые вы выдаете, чтобы вызываемый (внешний интерфейс/пользователь) знал, что он сделал что-то не так.

Если ваш код выдает неизвестное исключение, это означает, что в вашем коде есть серьезная ошибка. Если вы не ожидаете исключения, вы должны исправить его, а не тестировать.

Последнее замечание о коде: хотя эти исключения не являются лучшим примером, как и места, где они выбрасываются, эти исключения здесь, чтобы дать вам некоторое представление о том, как их тестировать. Это только для демонстрационных целей.

Проблема

Поскольку я создал целый учебник о xUnit и о том, как начать, я просто сообщаю вам, что добавляю новый проект xUnit в свое решение под названием «ExampleClass.Tests» и добавляю новый тестовый класс с именем «MyMoviesTests». В этом классе я добавляю два…