Урок за анотации на JUnit с пример

Съдържание:

Anonim

Какво представляват анотациите на JUnit?

JUNIT ANNOTATIONS е специална форма на синтактични метаданни, която може да бъде добавена към изходния код на Java за по-добра четливост и структура на кода. Променливите, параметрите, пакетите, методите и класовете могат да бъдат анотирани. Анотациите бяха въведени в Junit4, което прави Java кода по-четлив и опростен. Това е голямата разлика между Junit3 и Junit4, че Junit4 е базирана на анотации.

С познаването на анотациите в Junit5, човек може лесно да научи и внедри JUnit тест. По-долу е списъкът на важните и често използвани пояснения:

S.No. Анотации Описание
1. @Тест Тази анотация е заместител на org.junit.TestCase, което показва, че публичният void метод, към който е прикрепен, може да бъде изпълнен като тестов случай.
2. @Преди Тази анотация се използва, ако искате да изпълните някакъв оператор като предварителни условия преди всеки тест.
3. @BeforeClass Тази анотация се използва, ако искате да изпълните някои изрази преди всички тестови случаи, например тестова връзка, трябва да бъдат изпълнени преди всички тестови случаи.
4. @След Тази анотация може да се използва, ако искате да изпълните някои изрази след всеки тестов случай, например за нулиране на променливи, изтриване на временни файлове, променливи и т.н.
5. @След часовете Тази анотация може да се използва, ако искате да изпълните някои изрази след всички тестови случаи, например Освобождаване на ресурси след изпълнение на всички тестови случаи.
6. @Игнорира Тази анотация може да се използва, ако искате да игнорирате някои изрази по време на изпълнението на теста, например за деактивиране на някои тестови случаи по време на изпълнението на теста.
7. @ Тест (изчакване = 500) Тази анотация може да се използва, ако искате да зададете известно време за изчакване по време на изпълнението на теста, например ако работите по някакъв SLA (споразумение за ниво на услуга) и тестовете трябва да бъдат завършени в рамките на определено време.
8. @Test (очаква се = IllegalArgumentException.class) Тази анотация може да се използва, ако искате да обработите някакво изключение по време на изпълнението на теста. Например, ако искате да проверите дали даден метод хвърля определено изключение или не.

В този урок ще научите -

  • Пример за JUnit анотации
  • JUnit Assert Class
  • Клас JUnit Test Cases
  • Клас JUnit TestResult
  • JUnit Test Suite Class

Пример за JUnit анотации

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

Стъпка 1) Помислете за по-долу Java клас, който има различни методи, които са прикрепени към горепосочените пояснения:

JunitAnnotationsExample.java

пакет guru99.junit;импортиране на статични org.junit.Assert.assertEquals;импортиране на статичен org.junit.Assert.assertFalse;импортиране на java.util.ArrayList;внос org.junit.After;импортиране на org.junit.AfterClass;внос org.junit.Преди;внос org.junit.BeforeClass;внос org.junit.Ignore;внос org.junit.Test;публичен клас JunitAnnotationsExample {частен списък ArrayList ;@BeforeClassпублична статична празнота m1 () {System.out.println ("Използване на @BeforeClass, изпълнено преди всички тестови случаи");}@Предипублична празнота m2 () {list = new ArrayList  ();System.out.println ("Използване на анотации @Before, изпълнявани преди всеки тест");}@След часоветепублична статична празнота m3 () {System.out.println ("Използване на @AfterClass, изпълнено след всички тестови случаи");}@Следобществена празнота m4 () {list.clear ();System.out.println ("Използване на @After, изпълнява се след всеки тестов случай");}@Тестобществена празнота m5 () {list.add ("тест");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@Игнорирайобществена празнота m6 () {System.out.println ("Използване на @Ignore, това изпълнение се игнорира");}@ Тест (изчакване = 10)обществена празнота m7 () {System.out.println ("Използване на @Test (таймаут), може да се използва за налагане на таймаут в JUnit4 тестов случай");}@Test (очаква се = NoSuchMethodException.class)обществена празнота m8 () {System.out.println ("Използвайки @Test (очаквано), той ще провери за определено изключение по време на изпълнението му");}}

Стъпка 2) нека създадем клас на пробен бегач, за да изпълним горния тест:

TestRunner.java

пакет guru99.junit;внос org.junit.runner.JUnitCore;внос org.junit.runner.Result;внос org.junit.runner.notification.Failure;публичен клас TestRunner {публична статична void main (String [] args) {Резултат резултат = JUnitCore.runClasses (JunitAnnotationsExample.class);за (Неуспех при неуспех: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Резултат ==" + result.wasSuccessful ());}}

очакван резултат

  • Всички тестови случаи ще бъдат изпълнени един по един и всички изявления за печат могат да се видят на конзола.
  • Както е обсъдено в горната таблица @Before, @BeforeClass [метод m1 () и m2 ()] ще бъде изпълнен съответно преди всеки и преди всички тестови случаи.
  • По същия начин @ after, @ afterClass (метод m3 () и m4 ()) ще бъдат изпълнени съответно след всеки и след всички тестови случаи. @ignore (метод m6 ()) ще се третира като игнориране на теста.

Нека анализираме подробно тестови случаи, използвани в горния клас на Java:

  1. Помислете за метод m5 (), както е даден по-долу:
@Тестобществена празнота m5 () {list.add ("тест");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}

В горния метод, тъй като добавяте низ в променливата "list", така

  • list.isEmpty () ще върне false.
  • assertFalse (list.isEmpty ()) трябва да върне true.
  • В резултат тестът ще премине .

Тъй като сте добавили само един низ в списъка, така размерът е един.

  • list.size () трябва да върне стойност int като "1".
  • Така assertEquals (1, list.size ()) трябва да върне true.
  • В резултат тестът ще премине .
  1. Обмислете метод m7 (), както е даден по-долу:
@ Тест (изчакване = 10)обществена празнота m7 () {System.out.println ("Използване на @Test (таймаут), може да се използва за налагане на таймаут в JUnit4 тестов случай");}

Както беше обсъдено по-горе @Test (timeout = 10) анотацията се използва за налагане на времето за изчакване в тестовия случай.

  1. Помислете за метод m8 (), както е даден по-долу:
@Test (очаква се = NoSuchMethodException.class)обществена празнота m8 () {System.out.println ("Използвайки @Test (очаквано), той ще провери за определено изключение по време на изпълнението му");}

Както беше обсъдено по-горе, @Test (очаквано) ще провери за определено изключение по време на изпълнението му, така че методът m8 () ще хвърли "Няма такъв метод на изключение." В резултат на това тестът ще бъде изпълнен с изключение.

Тъй като всички тестови случаи са преминати, това води до успешно изпълнение на теста.

Действителен резултат

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

Вижте по-долу изявления за печат, които можете да видите на конзолата:

Използване на @BeforeClass, изпълнено преди всички тестови случаи

Използване на анотации @Before, изпълнявани преди всеки тест

Използване на @After, изпълнява се след всеки тест

Използване на анотации @Before, изпълнявани преди всеки тест

Използвайки @Test (таймаут), той може да се използва за налагане на таймаут в JUnit4 тестов случай

Използване на @After, изпълнява се след всеки тест

Използване на анотации @Before, изпълнявани преди всеки тест

Използвайки @Test (очаквано), той ще провери за определено изключение по време на изпълнението му

Използване на @After, изпълнява се след всеки тест

Използване на @AfterClass, изпълнено след всички тестови случаи

JUnit Assert Class

Този клас предоставя куп методи за твърдение, полезни при написването на тестов случай. Ако всички твърдения за твърдение са предадени, резултатите от теста са успешни. Ако някой от твърденията за отказ се провали, резултатите от теста са неуспешни.

Както видяхте по-рано, таблицата по-долу описва важни методи и описание на Assert:

S.No. Метод Описание
1. void assertEquals (булево очаквано, булево действително) Той проверява дали две стойности са равни на метода equals от клас Object
2. void assertFalse (логическо състояние) функционалността е да се провери дали дадено условие е невярно.
3. void assertNotNull (обект на обект) Функцията "assertNotNull" е да провери дали даден обект не е нулев.
4. void assertNull (обект на обект) Функцията "assertNull" е да провери дали обектът е нулев.
5. void assertTrue (логическо състояние) Функцията "assertTrue" е да провери дали дадено условие е вярно.
6. неуспешно неуспешно () Ако искате да хвърлите някаква грешка в твърдението, имате неуспех (), който винаги води до присъда за неуспех.
7. void assertSame ([String съобщение] Функцията "assertSame" е да провери дали двата обекта се отнасят до един и същ обект.
8. void assertNotSame ([String съобщение] Функцията "assertNotSame" е да провери дали двата обекта не се отнасят към един и същ обект.

Клас JUnit Test Cases

За да стартирате множество тестове, класът TestCase се предлага в пакетите org.junit.TestCase . Анотация @Test казва на JUnit, че този публичен метод за невалидност (Test Case тук), към който е прикрепен, може да се изпълни като тестов случай.

Под таблицата са показани някои важни методи, налични в клас org.junit.TestCase :

S.No. Метод Описание
1. int countTestCases () Този метод се използва за преброяване на броя на тестовите случаи, изпълнени чрез метод run (TestResult tr) .
2. TestResult createResult () Този метод се използва за създаване на обект TestResult .
3. Низ getName () Този метод връща низ, който не е нищо друго освен TestCase .
4. TestResult run () Този метод се използва за изпълнение на тест, който връща обект TestResult
5. void run (TestResult резултат) Този метод се използва за изпълнение на тест с обект TestResult, който не връща нищо.
6. void setName (име на низ) Този метод се използва за задаване на име на TestCase.
7. void setUp () Този метод се използва за писане на код за асоцииране на ресурси. напр. Създаване на връзка с база данни.
8. void tearDown () Този метод се използва за писане на код за издаване на ресурс. напр. Освободете връзка с база данни след извършване на операция по транзакция.

Клас JUnit TestResult

Когато изпълните тест, той връща резултат (под формата на обект TestResult ). Този обект TestResult може да се използва за анализ на получения резултат. Този резултат от теста може да бъде неуспешен или успешен. Вижте таблицата по-долу за важни методи, използвани в клас org.junit.TestResult:
S.No. Метод Описание
1. void addError (Тестов тест, Throwable t) Този метод се използва, ако се нуждаете от добавяне на грешка към теста.
2. void addFailure (Тестов тест, AssertionFailedError t) Този метод се използва, ако се нуждаете от добавяне на грешка към списъка с неуспехи.
3. void endTest (Тестов тест) Този метод се използва за уведомяване, че тестът е изпълнен (завършен)
4. int errorCount () Този метод се използва за получаване на грешката, открита по време на изпълнението на теста.
5. Грешки при изброяване () Този метод просто връща колекция (Изброяване тук) от грешки.
6. int failureCount () Този метод се използва за получаване на броя на грешките, открити по време на изпълнението на теста.
7. празно изпълнение (тест TestCase) Този метод се използва за изпълнение на тестов случай.
8. int runCount () Този метод просто брои изпълнения тест.
9. void startTest (Тестов тест) Този метод се използва за уведомяване, че е стартиран тест.
10. спиране на празнотата () Този метод се използва за тестово изпълнение, което трябва да бъде спряно.

JUnit Test Suite Class

Ако искате да изпълните множество тестове в определен ред, това може да стане чрез комбиниране на всички тестове на едно място. Това място се нарича тестови апартаменти.

Вижте таблицата по-долу за важни методи, използвани в клас org.junit.TestSuite :

S.No. Метод Описание
1. void addTest (Тестов тест) Този метод се използва, ако искате да добавите тест към пакета.
2. void addTestSuite (Class testClass) Този метод се използва, ако искате да зададете класа, докато добавяте тест към пакета.
3. int countTestCases () Този метод се използва, ако искате да преброите броя на тестовите случаи.
4. Низ getName () Този метод се използва за получаване на името на тестовия пакет.
5. void run (TestResult резултат) Този метод се използва за изпълнение на тест и събиране на резултатите от теста в обекта TestResult .
6. void setName (име на низ) Този метод се използва за задаване на името на TestSuite .
7. Тест testAt (индекс int) Този метод се използва, ако искате да върнете теста при даден индекс.
8. int testCount () Този метод се използва, ако искате да върнете редица тестове в Suite.
9. предупреждение за статичен тест (низово съобщение) Този метод връща тест, който ще се провали и регистрира предупредително съобщение.

Резюме:

  • JUnit предоставя преносим API, който предоставя всички важни класове и анотации, полезни при писането на единичен тест.
  • Класове, които са много полезни при писане на тест
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • списък с важни и често използвани пояснения

    @Преди

    @BeforeClass

    @След

    @След часовете

    @Тест

    @Игнорирай