Учебники

11) JUnit Vs TestNG

Testng и Junit являются средой тестирования, используемой для модульного тестирования . ФИЛЬМЫ ПОХОЖИЕ НА JUnit К нему добавлено немного больше функций, что делает TestNG более мощным, чем JUnit.

Этот учебник в основном ориентирован на анализ возможностей JUnit и TestNG. Это помогает разработчикам решить, какую платформу следует использовать для модульного тестирования. Давайте сначала проанализируем сходство между TestNG и JUnit4.

TestNG — это среда тестирования, вдохновленная JUnit и NUnit.

Вот таблица, которая показывает функции, поддерживаемые JUnit и TestNG.

Сравнение возможностей JUnit4 и TestNG

Оба TestNG и JUnit4 выглядят одинаково, за исключением одной или двух функций. Давайте проведем сравнение между ними, чтобы быстро решить, какая технология является более благоприятной для модульного тестирования. Ниже в таблице приведены функции, поддерживаемые обоими:

JUnit Vs TestNG

Аннотации

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