Testng и Junit являются средой тестирования, используемой для модульного тестирования . ФИЛЬМЫ ПОХОЖИЕ НА JUnit К нему добавлено немного больше функций, что делает TestNG более мощным, чем JUnit.
Этот учебник в основном ориентирован на анализ возможностей JUnit и TestNG. Это помогает разработчикам решить, какую платформу следует использовать для модульного тестирования. Давайте сначала проанализируем сходство между TestNG и JUnit4.
TestNG — это среда тестирования, вдохновленная JUnit и NUnit.
Вот таблица, которая показывает функции, поддерживаемые JUnit и TestNG.
Сравнение возможностей JUnit4 и TestNG
Оба TestNG и JUnit4 выглядят одинаково, за исключением одной или двух функций. Давайте проведем сравнение между ними, чтобы быстро решить, какая технология является более благоприятной для модульного тестирования. Ниже в таблице приведены функции, поддерживаемые обоими:
Аннотации
JUnit и TestNG используют аннотации, и почти все аннотации выглядят одинаково.
TestNG использует @BeforeMethod, @ AfterMethod, аналогичный @Before, @ After в JUnit4.
TestNG и Junit4 используют @Test (timeout = 1000) для тайм-аута. Проверьте таблицу ниже для получения более подробной информации.
SN | Описание | TestNG | JUnit 4 |
1 | Тестовая аннотация | @Тестовое задание | @Тестовое задание |
2 | Выполняется до вызова первого тестового метода в текущем классе | @BeforeClass | @BeforeClass |
3 | Выполняется после всех тестовых методов в текущем классе | @После урока | @После урока |
4 | Выполняется перед каждым методом теста | @BeforeMethod | @Перед |
5 | Выполняется после каждого метода испытаний | @AfterMethod | @После |
6 | аннотация, чтобы игнорировать тест | @Test (разрешить = ложь) | @ignore |
7 | аннотация для исключения | @Test (Ожидаемые исключения = ArithmeticException.class) | @Test (ожидается = ArithmeticException.class) |
8 | Тайм-аут | @Test (время ожидания = 1000) | @Test (время ожидания = 1000) |
9 | Выполняется перед всеми тестами в наборе | @BeforeSuite | н / |
10 | Выполняется после всех тестов в наборе | @AfterSuite | н / |
11 | Выполняется до запуска теста | @BeforeTest | н / |
12 | Выполняется после запуска теста | @AfterTest | н / |
13 | Выполняется до вызова первого тестового метода, принадлежащего к любой из этих групп | @BeforeGroups | н / |
14 | запустить после последнего метода теста, который принадлежит к любой из групп здесь | @AfterGroups | н / |
Люкс Тест
Наборы используются для выполнения нескольких тестов вместе. Наборы могут быть созданы с использованием как TestNG, так и JUnit4. Тем не менее, наборы являются более мощными в TestNG, поскольку он использует очень разные методы для выполнения тестов. Давайте разберемся, используя фрагмент кода, как показано ниже:
Использование JUnit4
Ниже класс описывает использование suite при работе с JUnit4:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty,it is used only as a holder for the above annotations }
Использование TestNG
TestNG использует xml для объединения всех тестов в одном месте. Ниже xml описывает использование комплекта при работе с TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
Игнорировать тест
Используя оба, мы можем пропустить тест. Давайте посмотрим его на примере кода, как показано ниже:
Использование JUnit4
Ниже приведен фрагмент кода, описывающий использование аннотации @ignore при работе с JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
Использование TestNG
Ниже приведен фрагмент кода, в котором описано использование аннотации @Test (enabled = false) при работе с TestNG:
@Test(enabled=false) public void TestWithException() { System.out.println("Method should be ignored as it's not ready yet"); }
Исключительный тест
Исключительное тестирование доступно как в TestNG, так и в JUnit4. Используется для проверки, какое исключение выдается из теста?
Использование JUnit4
Ниже приведен фрагмент кода, описывающий использование теста исключений при работе с JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Использование TestNG
Ниже приведен фрагмент кода, в котором описано использование теста исключений при работе с TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Тайм-аут
Эта функция реализована как в TestNg, так и в JUnit4.Timeout используется для завершения теста, который занимает больше времени, чем указано (в миллисекундах).
Использование JUnit4
Ниже приведен фрагмент кода, описывающий использование теста тайм-аута при работе с JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
Использование TestNG
Ниже приведен фрагмент кода, описывающий использование теста тайм-аута при работе с TestNG:
@Test(timeOut = 1000) public void method1() { while (true); }
Параметризованный тест
JUnit предоставляет более простой и понятный подход к тестированию, известный как параметризованный тест. И TestNG, и JUnit поддерживают параметризованный тест, но отличаются тем, как они определяют значение параметра. Давайте посмотрим на это один за другим.
Использование JUnit4
Аннотации «@RunWith» и «@Parameter» используются для предоставления значения параметра для модульного теста. Аннотация @Parameters должна возвращать List []. Этот параметр будет передан в конструктор класса в качестве аргумента.
@RunWith(value = Parameterized.class) public class JunitTest{ privateint number; public JunitTest6(int number) { this.number = number; } @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } }; returnArrays.asList(data); } @Test public void parameterTest() { System.out.println("Parameterized Number is : " + number); } }
Использование TestNG
В TestNG файл XML или «@DataProvider» используется для предоставления параметра для тестирования.
Здесь аннотация @Parameters, объявленная в методе, нуждается в параметре для тестирования. Данные, используемые в качестве параметра, будут предоставлены в XML-файлах конфигурации TestNG. Делая это, мы можем повторно использовать один тестовый набор с разными наборами данных, и мы можем получить разные результаты.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Смотрите ниже XML-файл, который будет использоваться для вышеуказанного класса:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <parameter name="number" value="2"/> <classes> <class name="com.guru99.Test1" /> </classes> </test> </suite>
Резюме :
Мы видели сравнение JUnit4 и TestNG в деталях. Мы также видели, что оба они похожи, за исключением параметризованного теста и теста зависимости. Короче говоря, мы можем сказать, исходя из гибкости и требований, мы можем выбрать любой из них для модульного тестирования.