В предыдущем уроке я объяснил основы модульного тестирования с помощью xUnit и C#. Этот учебник основан на счастливом потоке и наилучших сценариях. Я говорил об атрибутах Факт и Теория. Обозреватель тестов также был объяснен.
Но в некоторых случаях ваш код может вызвать исключение, из-за чего приложение перестанет работать и закроется. Модульный тест — это своего рода небольшое приложение. Итак, как нам это исправить? Как мы можем обрабатывать исключения? Еще лучше; как мы можем тестировать исключения с помощью xUnit?
Прежде чем мы начнем
… Лучше всего иметь приложение, которое генерирует исключения. Я использовал код из предыдущего урока и кое-что изменил. Вы можете найти код здесь:
https://github.com/KensLearningCurve/ExceptionHandlingWithxUnit
Несколько вещей, чтобы упомянуть:
- MyMovies.cs — это класс со всей логикой. Мы создадим тесты для этого класса.
- Метод Get(int id) выдает исключение, когда идентификатор равен нулю или меньше.
- Метод Delete(int id) генерирует исключение MovieNotFoundException(), которое является пользовательским исключением и находится в папке Exceptions.
Методы, вызывающие исключения, являются известными исключениями. Это означает, что мы знаем, что они будут выброшены, если кто-то использует их неправильно. Мы должны проверить, выбрасываются ли эти исключения в конкретных случаях (нулевой идентификатор меньшего и фильм не найден при попытке что-то удалить).
Известные исключения — это исключения, которые вы выдаете, чтобы вызываемый (внешний интерфейс/пользователь) знал, что он сделал что-то не так.
Если ваш код выдает неизвестное исключение, это означает, что в вашем коде есть серьезная ошибка. Если вы не ожидаете исключения, вы должны исправить его, а не тестировать.
Последнее замечание о коде: хотя эти исключения не являются лучшим примером, как и места, где они выбрасываются, эти исключения здесь, чтобы дать вам некоторое представление о том, как их тестировать. Это только для демонстрационных целей.
Проблема
Поскольку я создал целый учебник о xUnit и о том, как начать, я просто сообщаю вам, что добавляю новый проект xUnit в свое решение под названием «ExampleClass.Tests» и добавляю новый тестовый класс с именем «MyMoviesTests». В этом классе я добавляю два…