JUnit Урок за анотации с пример: Какво е @Test и @After
Какво е JUnit анотации?
JUnit Анотации е специална форма на синтактични метаданни, към които може да се добави Java изходен код за по-добра четливост и структура на кода. Променливи, параметри, пакети, методи и класове могат да бъдат анотирани. Анотациите бяха въведени в Junit4, което прави Java кодът е по-четлив и прост. Това е голямата разлика между Junit3 и Junit4, че Junit4 е базиран на анотация.
С познаването на анотациите в Junit5 човек може лесно да научи и внедри a JUnit тест. По-долу е важното и често използвано JUnit списък с анотации:
S.No. | Анотации | Descriptйон |
---|---|---|
1. | @Тест | Тази анотация е заместител на org.junit.TestCase, което показва, че публичният void метод, към който е прикрепен, може да бъде изпълнен като тестов случай. |
2. | @Преди | Тази анотация се използва, ако искате да изпълните някакво изявление като предварителни условия преди всеки тестов случай. |
3. | @BeforeClass | Тази анотация се използва, ако искате да изпълните някои изрази, преди всички тестови случаи за например тестова връзка трябва да бъдат изпълнени преди всички тестови случаи. |
4. | @След | Тази анотация може да се използва, ако искате да изпълните някои оператори след всеки Тестов случай например за нулиране на променливи, изтриване на временни файлове, променливи и т.н. |
5. | @След часовете | Тази анотация може да се използва, ако искате да изпълните някои изрази след всички тестови случаи, например Освобождаване на ресурси след изпълнение на всички тестови случаи. |
6. | @Игнорира | Тази анотация може да се използва, ако искате да игнорирате някои изрази по време на изпълнение на тест, например за деактивиране на някои тестови случаи по време на изпълнение на тест. |
7. | @Test(време за изчакване=500) | Тази анотация може да се използва, ако искате да зададете известно време на изчакване по време на изпълнение на тест, например ако работите по някакво SLA (Споразумение за ниво на обслужване) и тестовете трябва да бъдат завършени в рамките на определено време. |
8. | @Test(expected=IllegalArgumentException.class) | Тази анотация може да се използва, ако искате да обработите някакво изключение по време на изпълнение на теста. Например, ако искате да проверите дали определен метод хвърля определено изключение или не. |
JUnit Пример за анотации
Нека създадем клас, обхващащ важното JUnit анотации с прости изрази за печат и го изпълнете с тестов клас:
Стъпка 1) Разгледайте по-долу java клас с различни методи, които са прикачени към изброените по-горе анотации:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Стъпка 2) нека създадем тестов клас, който да изпълни горния тест:
TestRunner.java
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
очакван резултат
- Всички тестови случаи ще бъдат изпълнени един по един и всички инструкции за печат могат да се видят на конзолата.
- Както е обсъдено в горната таблица @Преди анотация в JUnit, @BeforeClass [ метод m1() и m2() ] ще се изпълни съответно преди всеки и преди всички тестови случаи.
- По същия начин @After in JUnit, @afterClass (метод m3() и m4()) ще се изпълни съответно след всеки и след всички тестови случаи. @ignore (метод m6()) ще се третира като игнориране на теста.
Нека анализираме подробно тестовите случаи, използвани в горния java клас:
- Разгледайте метода m5(), както е дадено по-долу:
@Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); }
В горния метод, тъй като добавяте низ в променливата „списък“, така че
- list.isEmpty() ще върне false.
- assertFalse(list.isEmpty()) трябва да върне true.
- В резултат на това тестът ще минавам.
Тъй като сте добавили само един низ в списъка, така че размерът е един.
- list.size() трябва да върне int стойност като „1“.
- So assertEquals(1, list.size()) трябва да върне true.
- В резултат на това тестът ще минавам.
- Разгледайте метода m7(), както е дадено по-долу:
@Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); }
Както беше обсъдено по-горе @Test(време за изчакване = 10)анотацията се използва за налагане на изчакване в тестовия случай.
- Разгледайте метода m8(), както е дадено по-долу:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Както беше обсъдено по-горе @Тест (очаква се) ще проверява за определено изключение по време на изпълнението си, така че методът m8() ще хвърли „Няма такова изключение за метод“. В резултат на това тестът ще бъде изпълнен с изключение.
Тъй като всички тестови случаи са преминали, това води до успешно изпълнение на теста.
Действителен резултат
Тъй като в горния пример има три тестови случая, всички тестови случаи ще бъдат изпълнени един по един. Вижте резултата по-долу:
Вижте по-долу отчетите за печат, които могат да се видят на конзолата:
Използване на @BeforeClass, изпълнено преди всички тестови случаи
Използване на анотации @Before, изпълнявани преди всеки тестов случай
Използване на @After, изпълнявано след всеки тестов случай
Използване на анотации @Before, изпълнявани преди всеки тестов случай
Използвайки @Test(timeout), може да се използва за налагане на таймаут JUnit4 тестов случай
Използване на @After, изпълнявано след всеки тестов случай
Използване на анотации @Before, изпълнявани преди всеки тестов случай
Използвайки @Test(expected), той ще проверява за определено изключение по време на изпълнението си
Използване на @After, изпълнявано след всеки тестов случай
Използване на @AfterClass, изпълнено след всички тестови случаи
JUnit Утвърдете клас
Този клас предоставя куп методи за твърдения, полезни при писане на тестов случай. Ако всички оператори assert са приети, резултатите от теста са успешни. Ако някое изявление за твърдение е неуспешно, резултатите от теста са неуспешни.
Както видяхте по-рано, таблицата по-долу описва важни методи за потвърждаване и описание:
S.No. | Начин на доставка | Descriptйон |
---|---|---|
1. | void assertEquals(булева очаквана, булева действителна) | Той проверява дали две стойности са равни, подобно на метода equals на класа Object |
2. | void assertFalse (булево условие) | функционалността е да се провери дали дадено условие е невярно. |
3. | void assertNotNull (обект обект) | Функционалността „assertNotNull“ е да провери дали даден обект не е нулев. |
4. | void assertNull (обект обект) | Функционалността „assertNull“ е да провери дали даден обект е null. |
5. | void assertTrue (булево условие) | Функционалността „assertTrue“ е да провери дали дадено условие е вярно. |
6. | void fail() | Ако искате да хвърлите някаква грешка при твърдение, имате fail(), който винаги води до присъда за неуспех. |
7. | void assertSame([Съобщение за низ] | Функционалността „assertSame“ е да провери дали двата обекта се отнасят за един и същ обект. |
8. | void assertNotSame([Съобщение от низ] | Функционалността „assertNotSame“ е да провери дали двата обекта не се отнасят за един и същи обект. |
JUnit Клас тестови случаи
За да стартирате множество тестове, класът TestCase е наличен в org.junit.TestCase пакети. Анотацията @Test казва JUnit че този публичен невалиден метод (Тестов случай тук), към който е прикачен, може да се изпълнява като тестов случай.
Таблицата по-долу показва някои важни методи, налични в org.junit.TestCase клас:
S.No. | Начин на доставка | Descriptйон |
---|---|---|
1. | int countTestCases() | Този метод се използва за преброяване на броя тестови случаи, изпълнени от изпълнение (TestResult tr) метод. |
2. | TestResult createResult() | Този метод се използва за създаване на a Резултат от тест обект. |
3. | Низ getName() | Този метод връща низ, който не е нищо друго освен a TestCase. |
4. | TestResult run() | Този метод се използва за изпълнение на тест, който връща a Резултат от тест обект |
5. | невалидно изпълнение (резултат от TestResult) | Този метод се използва за изпълнение на тест, имащ a Резултат от тест обект, който не връща нищо. |
6. | void setName(име на низ) | Този метод се използва за задаване на име на a TestCase. |
7. | void setUp() | Този метод се използва за писане на код за асоцииране на ресурси. например Създайте връзка с база данни. |
8. | void tearDown() | Този метод се използва за писане на код за освобождаване на ресурси. напр. Освободете връзката с базата данни след извършване на транзакционна операция. |
JUnit Клас TestResult
Когато изпълните тест, той връща резултат (под формата на Резултат от тест обект). Този обект TestResult може да се използва за анализ на получения обект. Този резултат от теста може да бъде или неуспешен, или успешен.
Вижте таблицата по-долу за важни методи, използвани в класа org.junit.TestResult:
S.No. | Начин на доставка | Descriptйон |
---|---|---|
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. | void stop() | Този метод се използва за спиране на пробно изпълнение. |
JUnit Тестов пакет клас
Ако искате да изпълните няколко теста в определен ред, това може да стане чрез комбиниране на всички тестове на едно място. Това място се нарича тестови пакети.
Вижте таблицата по-долу за важни методи, използвани в org.junit.TestSuite клас:
S.No. | Начин на доставка | Descriptйон |
---|---|---|
1. | void addTest (Тест тест) | Този метод се използва, ако искате да добавите тест към пакета. |
2. | void addTestSuite(Клас testClass) | Този метод се използва, ако искате да посочите класа, докато добавяте тест към пакета. |
3. | int countTestCases() | Този метод се използва, ако искате да преброите броя на тестовите случаи. |
4. | Низ getName() | Този метод се използва за получаване на името на тестовия пакет. |
5. | невалидно изпълнение (резултат от TestResult) | Този метод се използва за изпълнение на тест и събиране на резултат от теста Резултат от тест обект. |
6. | void setName(име на низ) | Този метод се използва за задаване на името на TestSuite. |
7. | Тествайте testAt(int индекс) | Този метод се използва, ако искате да върнете теста при даден индекс. |
8. | int testCount() | Този метод се използва, ако искате да върнете няколко теста в пакета. |
9. | предупреждение за статичен тест (низово съобщение) | Този метод връща тест, който ще бъде неуспешен и ще регистрира предупредително съобщение. |
Oбобщение
- JUnit предоставя преносим API, който предоставя всички важни класове и Selenium анотации, полезни при писане на единичен тест.
- Класове, които са много полезни при писане на тестов случай
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Важен и често използван JUnit списък с анотации@Before@BeforeClass@After
@След часовете
@Тест
@Игнориране