В предишен урок обясних основите на модулното тестване с xUnit и C#. Този урок се основава на щастлив поток и най-добри сценарии. Говорих за атрибутите Факт и Теория. Test Explorer също беше обяснен.

Но в някои случаи вашият код може да изведе изключение, което кара приложението да спре да работи и да го затвори. Единичният тест е донякъде малко приложение. И така, как да поправим това? Как можем да се справим с изключенията? Още по-добре; как можем да тестваме изключения с xUnit?

Преди да започнем

… Най-добре е да имате приложение, което хвърля изключения. Използвах кода от предишния урок и промених няколко неща. Можете да намерите кода тук:

https://github.com/KensLearningCurve/ExceptionHandlingWithxUnit

Няколко неща, които трябва да споменем:

  1. MyMovies.cs е класът, който има цялата логика. Ще създадем тестове за този клас.
  2. Методът Get(int id) хвърля изключение, когато ID е нула или по-малко.
  3. Методът Delete(int id) хвърля MovieNotFoundException(), което е персонализирано изключение и може да се намери в папката Изключения.

Методите, които хвърлят изключения, са известни изключения. Това означава, че знаем, че те ще бъдат хвърлени, ако някой ги използва погрешно. Трябва да тестваме дали тези изключения се хвърлят в определени случаи (ID нула или по-малко и филмът не е намерен, когато се опитвате да изтриете нещо).
Известните изключения са изключения, които хвърляте, за да уведомите извиквания (преден край/потребител), че те направи нещо нередно.

Ако вашият код хвърля неизвестно изключение, това означава, че кодът ви има сериозна грешка. Ако не очаквате изключение, трябва да го коригирате, а не да го тествате.

Последна бележка за кода: Въпреки че тези изключения не са най-добрият пример, нито местата, където се хвърлят, тези изключения са тук, за да ви дадат някаква представа как да ги тествате. Това е само за демонстрационни цели.

Проблемът

Тъй като създадох цял урок за xUnit и как да започна, просто ви казвам, че добавям нов проект xUnit към моето решение, наречен „ExampleClass.Tests“, и добавям нов тестов клас с името „MyMoviesTests“. В рамките на този клас добавям две...