ПредишенСледващото

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

По-долу са пет начина на изпитване рамка JUnit намеси очакваното изключение да проверят неговите свойства. Първите четири от тях може да се използва в JUnit 4, и последния метод използва нов в JUnit 5.

Като пример, се явя на изпит, за да се демонстрира функциите на стандартната библиотека за създаване на временен файл. Ще проверим, че изключение от тип IOException възниква при опита за създаване на файла в несъществуваща директория. В този случай, преддоговорната информация в същия тест създава временна директория и след това изтрити, така че да можем да получите гарантиран несъществуваща директория, която се опитвате да създадете файл:

Разбира се, в такъв тест пада, а докладът ще бъде написано, че е възникнала изключение. И ние трябва да се в този случай, тестът напротив маркиран като успешна. Нека да видим как тя може да бъде коригирана.

Най-лесният начин да докладва рамка тест, който се очаква изключение - да се уточни допълнителен параметър очаква през @Test пояснения:

Този параметър трябва да съдържа очакваното вида на изключение. Ако има изключение от този тип - на теста ще се проведе успешно. Ако има изключение на друг тип или не на всички - на теста ще падне.

  • Вие не може да се провери на текстови съобщения или други имоти, произтичащи изключения.
  • Невъзможно е да се знае точно къде е настъпило изключението. В този пример, той не може да бъде изхвърлен от функцията за тестване и малко по-рано, за да се създаде временна директория, когато се опитате. Тест дори не можеше да стигне до извикате функцията тест - но в доклада не се маркира като успешно премина!

Вторият от тези проблеми са толкова ужасна, че аз не препоръчвам някой някога се използва този метод.

2. Опитайте се да улов

И двата недостатъци могат да бъдат отстранени, ако изключенията за улов изрично с помощта на дизайн пробвам улов:

Ако по изключение се случва пред блока пробвам - тест падне, ние научаваме, че той е имал проблеми.

Ако функцията на теста не се хвърлят никакво изключение на всички - ние се да се провали () в следващия ред, изпитването пада.

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

Той приключи успешно само когато функцията тест хвърля изключение на необходимия тип.

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

Въпреки това, да се работи с опит улов изгради неудобно.

За да се отървете от него, можете да използвате правило ExpectedException. включени в стандартната разпределение JUnit 4:

Кодът сега има една проста равнинна структура, въпреки че общият брой на реда код, за съжаление се увеличава.

Но основният проблем на този метод е, че тестът в този стил изглежда неестествено - първо, за да опише поведението, а след това нарича функция. Разбира се, това е въпрос на вкус, но ми харесва, когато проверява позициониран след функциите на тестови повикване.

4. AssertJ / догонване Throwable

По-красив начин, като се използват характеристиките на Java 8, предлагат допълнителни библиотеки като AssertJ или вдигане Може да се изхвърли. Ето един пример за работа с AssertJ:

И ако не е изключение - "капан" се хвърля изключение и тестът ще падне.

5. JUnit 5

Но защо трябва да използвате каквито и да било допълнителни библиотеки, защо тестови рамки не осигуряват удобна възможност за работа с очакваните изключения?

Вече осигури. Прихване изключения с JUnit 5 много прилича на предишния пример:

По-рано, такава възможност в Junit липсва, тъй като предишните версии на JUnit са фокусирани върху по-стари версии на Java, който не е имало ламбда изрази и писане на код, като това е просто невъзможно. Да, можете да направите нещо подобно, с помощта на анонимни класове, но тя изглежда толкова ужасно, че строителството опит улов изглежда езда изисканост.

Така че, ако трябва да напишете на тестовете, в които по изключение настъпва се проверява - има основание да се търсят нови възможности JUnit 5.

В Junit провери очакваното изключение • колкото искате, аз ще ти кажа

Сподели във Twitter Сподели във Facebook Сподели във Google+

Подкрепете проекта - споделете линка, благодаря!