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 в деталях. Мы также видели, что оба они похожи, за исключением параметризованного теста и теста зависимости. Короче говоря, мы можем сказать, исходя из гибкости и требований, мы можем выбрать любой из них для модульного тестирования.
