list junit annotations
Този урок обяснява всичко за анотациите на JUnit, както и сравнение на анотациите в JUnit 4 срещу JUnit 5:
Научихме различните начини за изпълнение на JUnit тестови случаи и видяхме как да създадем и изпълним тестов пакет в нашия предишен урок.
В този урок ще опознаем видния аспект на JUnit, който се нарича Анотации. Започвайки от JUnit 4, анотациите са налице и правят JUnit много опростен, по-полезен и много по-лесен за използване.
Анотации е Java API, който позволява на JVM да разпознава типа на метода, дефиниран в тестовия клас. Често се използват „пояснения за обратно извикване на жизнения цикъл“.
=> Посетете тук, за да научите JUnit от нулата.
Какво ще научите:
Анотации на JUnit - JUnit 4 срещу JUnit 5
Изпълнението на теста преминава през различни етапи от жизнения цикъл, както е дадено по-долу:
- Преди започване на тест, трябва да се извършат определени дейности при започване на клас.
- Някои други дейности, които трябва да бъдат извършени преди да започне изпълнението на тестовата кутия.
- Някои дейности, които трябва да бъдат извършени след изпълнението на теста и
- Определени дейности в края на изпълнението на всички тестове в клас.
За да се установи, че тези дейности се извършват през всеки етап от жизнения цикъл на Java, трябва да има определени дефинирани от потребителя методи или функции, наречени „ методи за обратно извикване на жизнения цикъл .
Поведението на тези методи за обратно извикване на жизнения цикъл се определя от вградения ‘ анотации за обратно извикване на жизнения цикъл ' използва се в JUnit.
Пример: Нека се опитаме да го направим още по-опростен, като свържем тези методи за обратно извикване на жизнения цикъл и пояснения с пример за тестване на автомат за кафе.
- Метод machineReady (), който проверява дали водата, млякото и кафените зърна са налични преди включването на машината.
- Друг метод startMachine (), който включва машината, може да се наложи нова хартиена чаша в машината.
- Тестова кутия, която проверява „ Топла вода () ’Опция.
- Друг тест, който проверява „ Капучино () ’Опция.
- Друг тест, който проверява „ ExpressoCoffee () ’Опция.
- Друг метод “ throwCup () ”, Който хвърля използваните чаши в кошчето.
- Метод на ниво клас “ throwTrashandSwitchOff () ”Хвърля преливаща отпадъчна течност от тавата в легенчето и изключва машината.
И така, в горния пример, ето как следва жизненият цикъл на теста:
- startMachine () ще работи преди всеки тест - Топла вода (), Капучино () и ExpressoCoffee () работи.
- Всеки от този тест също следва метода throwCup ().
- Методите machineReady () и throwTrashandSwitchOff () са метод на ниво клас, който се изпълнява само веднъж за клас. Методът machineReady () се изпълнява веднъж, докато класът инициира изпълнение. Методът throwTrashandSwitchOff () се изпълнява веднъж, след като всички тестови случаи завършат изпълнението.
Сега възниква въпросът, това са само Java методи, тогава:
най-доброто мобилно шпионско приложение за android
- Как ще настояваме JVM да работи machineReady () само веднъж на ниво клас и throwTrashandSwitchOff () в края на изпълнението на класа?
- Как ще накараме JVM да знае това startMachine () и throwCup () трябва да се изпълни, преди да се изпълни всеки тест и съответно след завършване на всяко изпълнение на тест?
- Как можем да накараме JVM да идентифицира тези методи Топла вода (), Капучино () и ExpressoCoffee () трябва ли да се изпълняват тестови случаи?
Отговор: Единственият отговор на горните въпроси е, че анотациите за обратно извикване на жизнения цикъл правят цялата необходима магия.
(Засега нека приемем, че създаваме този клас в JUnit 4)
Анотациите на жизнения цикъл - @BeforeClass, @AfterClass, @Before, @After, и @Тест са истинските отговори на горните три въпроса. Почти сме сигурни, че след като прочетете указанията по-долу, ще се изясните с анотациите за обратно извикване на жизнения цикъл и неговия работен процес.
- Анотирайте метода machineReady () с @BeforeClass и JVM ще го накара да се стартира веднъж по време на началото на класа.
- Анотирайте метода изхвърлям боклук () с @След часовете и JVM ще го накара да се изпълни веднъж в края на класа.
- Анотирайте метода startMachine () с @Преди и JVM ще го стартира, преди да се изпълни всеки тест.
- Анотирайте метода throwCup () с @След и JVM ще го стартира след изпълнението на всеки тестов случай.
- Коментирайте всеки от тези методи Топла вода (), Капучино () и ExpressoCoffee () с @Тест и JVM знае, че това са основните тестови случаи за изпълнение на JUnit класа.
Нека да разгледаме бързо Анотации за обратно извикване на JUnit за JUnit 4 срещу JUnit 5
ЮНИТ 4 АНОТАЦИЯ | ЮНИТ 5 АНОТАЦИЯ | |
---|---|---|
@RepeatedTest | 1. Юнит 5 поддържа многократно изпълнение на тестовия метод за определен брой пъти, използвайки @RepeatedTest анотация | |
@Преди | @BeforeEach | |
@След | @AfterEach | |
@BeforeClass | @BeforeAll | |
@След часовете | @След всичко | |
@Тест | @Тест |
Последователен работен поток на анотациите на жизнения цикъл
По-долу е даден последователният работен поток на поясненията за жизнения цикъл за JUnit 4:
- Методът, анотиран с @BeforeClass, се изпълнява веднъж в началото на класа.
- Методът, коментиран с @Before, се изпълнява преди Testcase 1 да започне.
- Методът Testcase1, анотиран с @Test, е тестовият случай в класа.
- Методът, коментиран с @After се изпълнява, след като Testcase 1 завърши изпълнението.
- Методът, анотиран с @Before, се изпълнява преди Testcase 2 да започне.
- Методът Testcase2, анотиран с @Test, е тестовият случай в класа.
- Методът, коментиран с @After се изпълнява, след като Testcase 2 завърши изпълнението.
- Методът, анотиран с @AfterClass, се изпълнява веднъж в края на класа, след като и двата теста 1 и 2 са изпълнени.
Последователният работен поток на поясненията за жизнения цикъл за JUnit 5 е както следва:
- Методът, анотиран с @BeforeAll, се изпълнява веднъж в началото на класа.
- Методът, анотиран с @BeforeEach, се изпълнява преди Testcase 1 да започне.
- Методът Testcase1, анотиран с @Test, е тестовият случай в класа.
- Методът, анотиран с @AfterEach, се изпълнява, след като Testcase 1 завърши изпълнението.
- Методът, анотиран с @BeforeEach, се изпълнява преди Testcase 2 да започне.
- Методът Testcase2, анотиран с @Test, е тестовият случай в класа.
- Методът, анотиран с @AfterEach, се изпълнява, след като Testcase 2 завърши изпълнението.
- Методът, анотиран с @AfterAll, се изпълнява веднъж в края на класа, след като и двата теста 1 и 2 са изпълнени.
Разработване на всяка анотация
В този раздел нека да се потопим дълбоко и да разберем подробно какво прави всеки от анотациите за обратно извикване на жизнения цикъл:
@Before (JUnit 4) / @ BeforeEach (JUnit 5):
- Анотираният метод се изпълнява преди изпълнението на всеки тестов метод в тестовия клас.
- Тази анотация може да се използва, когато искате да настроите ресурсите или тестовите данни непосредствено преди започването на всеки тест.
- Например, ако има 5 тестови случая в JUnit тестов клас, тогава методът, анотиран с @ Before / @ BeforeEach, се изпълнява 5 пъти преди всяко от изпълнението на тестовия случай.
@After (JUnit 4) / @ AfterEach (JUnit 5):
- Анотираният метод се изпълнява след изпълнението на всеки тестов метод в тестовия клас.
- Тази анотация може да се използва, когато искате да освободите използвани ресурси или тестови данни след всеки тестов случай.
- Например, ако има 5 тестови случая в JUnit тестов клас, тогава методът, анотиран с @ After / @ AfterEach, се изпълнява 5 пъти след изпълнението на тестовите случаи.
@BeforeClass (JUnit 4) / @ BeforeAll (JUnit 5):
- Анотираният метод се изпълнява преди да бъдат изпълнени всички тестови методи в тестов клас.
- Тази анотация може да се използва, когато искате да настроите ресурси или тестови данни на ниво клас.
- Тъй като този метод е анотиран с @ BeforeClass / @ BeforeAll се изпълнява само веднъж за тестов клас и копието на метода се споделя в класа, а методът трябва да бъде заявен статични.
- Например, ако има 5 тестови случая в тестов клас JUnit, тогава методът, анотиран с @ BeforeClass / @ BeforeAll, се изпълнява веднъж на тестов клас, преди да се инициира всеки тестов случай.
@AfterClass (JUnit 4) / @ AfterAll (JUnit 5):
- Анотираният метод се изпълнява след изпълнението на всички тестови методи в тестов клас.
- Тази анотация може да се използва, когато искате да освободите използваните ресурси или тестови данни на ниво клас.
- Тъй като този метод е анотиран с @ AfterClass / @ AfterAll се изпълнява само веднъж за тестов клас и копието на метода се споделя в класа, методът трябва да бъде заявен статични.
- Например, ако има 5 тестови случая в JUnit тестов клас, тогава методът, анотиран с @ AfterClass / @ AfterAll, се изпълнява веднъж на тестов клас, след като всички тестови случаи завършат изпълнението.
@ Тест (JUnit 4 и JUnit 5):
- Анотацията @Test е често срещана за JUnit 4, както и за JUnit 5. Анотираните методи представляват тестовите случаи в класа.
- Възможно е да има множество методи, всеки анотиран с @Test в клас JUnit. Това предполага, че клас може да има множество тестови случаи.
- Има различни атрибути или параметри за тестване кой може да бъде предаден. Можете да добавите принудително изчакване за тестов случай или да добавите изключение. Това ще бъде разгледано подробно в отделен урок.
- Анотираният метод не може да бъде частен или статичен и не може да върне никаква стойност.
- Методът @Test трябва да бъде деклариран като публичен в JUnit 4, докато Junit 5 позволява тест, дефиниран без модификатора на достъп ‘public’, тъй като по подразбиране той счита ‘no modifier access’ като ‘public’.
Пример за основен тест JUNIT
Основен ДЖУНИТ 4 пример за пояснения @BeforeClass, @Before, @Test, @After и @AfterClass беше показан чрез кода с обяснението му в по-ранния ни урок за „Тестови тела“.
Нека разгледаме основното JUnit 5 Програма за демонстриране на работата на анотациите за обратно извикване на жизнения цикъл @BeforeAll, @BeforeEach, @Test, @AfterEach и @AfterAll.
Код за JUnit5Program.java:
public class JUnit5Program { @BeforeAll public static void preClass() { System.out.println('@BeforeAll – the annotated method runs once before all other methods execute'); } @BeforeEach public void setUp() { System.out.println('_______________________________________________________
'); System.out.println('@BeforeEach – the annotated method executes before each test '); } @Test public void test_JUnit1() { System.out.println('@Test – this is test case 1'); } @Test public void test_JUnit2() { System.out.println('@Test – this is test case 2'); } @Test public void test_JUnit3() { System.out.println('@Test – this is test case 3'); } @AfterEach public void tearDown() { System.out.println('@AfterEach – the annotated method executes after each test executes'); System.out.println('_______________________________________________________
'); } @AfterAll public static void postClass() { System.out.println('@AfterAll – the annotated method runs once after all other methods execute'); } }
При изпълнението на файла с класа резултатът по-долу се показва в прозореца на конзолата.
Допълнителни пояснения - JUnit 4 срещу JUnit 5
Има много допълнителни пояснения, които се използват за конкретни цели. Ще видим списъка с пояснения за JUnit 4 срещу JUnit 5 и целта, която тя служи накратко.
В предстоящите ни уроци ще има подробен урок за всяка от тези анотации.
ЮНИТ 4 АНОТАЦИЯ | ЮНИТ 5 АНОТАЦИЯ | Описание накратко |
---|---|---|
@FixMethodOrder | @TestMethodOrder & @Order | 1. Тези пояснения позволяват на потребителя да избере реда на изпълнение на методите в тестов клас |
@Rule & @ClassRule | @ExtendWith | 1. @Rule - Анотацията е разширена от класа TestRule, който помага да се прилагат определени правила за тестовите случаи. 2. Например: създаването на временна папка преди изпълнението на тестовия случай и изтриването на папката след изпълнение може да бъде зададено чрез правило. 3. @Rule е наличен само в JUnit 4, който може да се използва в JUnit 5 Vintage, но @ExtendWith предоставя по-близка функция за JUnit 5 4. По подобен начин може да се зададе глобален таймаут с помощта на @Rule. |
NA | @TestFactory | 1. Тази анотация се поддържа само от JUnit 5 и помага за създаването на динамични тестове или тестове по време на изпълнение. 2. Той връща поток от данни като събиране и не може да използва анотации за обратно извикване на жизнения цикъл |
NA | @ Вложен | 1. Тази анотация се поддържа само от JUnit Jupiter 2. Помага ни да създаваме вложени тестови случаи. 3. Например, клас 1 с testcase 1 може да има @Nested Class 2 с testcase 2. Това прави testcase 2 вложено testcase за testcase 1. Следователно testcase 1 се изпълнява, след това testcase 2 се изпълнява. 4. Ако @Nested анотацията не се използва, вложеният клас няма да се изпълни. |
@ Категория | @Tag | 1. Тази анотация помага за маркиране и филтриране на тестовете 2. Можете да включите тестове за изпълнение или да ги изключите чрез филтриране въз основа на категориите, в които попадат. |
@RunWith (Параметризиран.клас) @ Параметризирани. Параметри | @ParameterizedTest и @ValueSource | 1. Тази анотация се използва за многократно стартиране на метод с вариации на тестови данни. 2. JUnit 4 поддържа @RunWith и @Parameters, докато JUnit 5 Jupiter поддържа @ParameterizedTest с @ValueSource |
@DisplayName | 1. Потребителско дефинирано име може да бъде дадено на тестов метод или клас с цел показване. | |
@TestInstance (LifeCycle.PER_CLASS) и @TestInstance (LifeCycle.PER_METHOD) | 1. JUnit 5 поддържа конфигурацията на жизнения цикъл на тестовете. 2. Както JUnit 4, така и 5 следват извикването за жизнения цикъл на метода по подразбиране, докато също може да се направи конфигурация за клас. |
Референции => JUnit 4 , JUnit 5
Заключение
- Научихме за анотациите за обратно извикване на жизнения цикъл и последователния работен процес, в който тестовите методи се изпълняват въз основа на техните анотации.
- Научихме анотациите, използвани за JUnit 4 и анотациите за JUnit 5.
- Също така научихме за допълнителни анотации, които JUnit 4 поддържа и тези, които поддържат само JUnit 5.
=> Внимавайте тук за простите серии за обучение JUnit.
Препоръчително четене
- Какво е приспособление за тестване на JUnit: Урок с примери за JUnit 4
- JUnit тестове: Как да напиша JUnit тестови случаи с примери
- Урок за JUnit за начинаещи - какво е тестване на JUnit
- Изтеглете, инсталирайте и конфигурирайте JUnit в Eclipse
- Няколко начина за изпълнение на JUnit тестове
- Въведение в JUnit Framework и нейното използване в Selenium Script - Селен Урок # 11
- Скрит списък за масив и други колекции в Java
- Методи на Java List - Сортиране на списък, Съдържа, Добавяне на списък, Премахване на списък