TestNG против JUnit – разница между ними

Ключевая разница между TestNG и JUnit

  • TestNG — это платформа на основе Java, а JUnit — это платформа модульного тестирования с открытым исходным кодом для JAVA.
  • Сравнивая TestNG и JUnit, аннотации TestNG проще использовать и понимать, чем JUnit.
  • TestNG позволяет нам создавать параллельные тесты, тогда как JUnit не поддерживает запуск параллельных тестов.
  • В TestNG тестовые случаи можно группировать вместе, а в JUnit группировать тесты вместе невозможно.
TestNG против JUnit
TestNG против JUnit

Что такое TestNG?

ТестНГ — это среда автоматизированного тестирования, в которой NG означает «Следующее поколение». TestNG вдохновлен JUnit который использует аннотации (@). TestNG преодолевает недостатки JUnit и предназначен для сквозное тестирование легко.

Используя TestNG, вы можете создать правильный отчет и легко узнать, сколько тестовых случаев пройдено, не выполнено или пропущено. Вы можете выполнить неудачные тестовые случаи отдельно.

Что такое Юнит?

JUnit — это модуль с открытым исходным кодом. Тестирование Фреймворк для JAVA. Это полезно для Java Разработчики для написания и запуска повторяемых тестов. Первоначально его разработали Эрих Гамма и Кент Бек. Это экземпляр архитектуры xUnit. Как следует из названия, он используется для Модульное тестирование небольшого куска кода.

Разработчики, которые следуютwing методология, основанная на тестировании, должна сначала написать и выполнить модульный тест, а затем любой код.

Как только вы закончите работу с кодом, вам следует выполнить все тесты, и они должны пройти. Каждый раз, когда добавляется какой-либо код, вам необходимо повторно выполнить все тестовые примеры и убедиться, что ничего не сломано.

Различия между JUnit и TestNG

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

Различия между JUnit и TestNG

Аннотации

И JUnit, и TestNG используют аннотации, и почти все аннотации выглядят одинаково.

TestNG использует @BeforeMethod, @AfterMethod аналогично @Before, @After в JUnit4.

И TestNG, и Junit4 используют @Test(timeout = 1000) для таймаута. Дополнительную информацию см. в таблице ниже.tails-

SNA Описание ТестНГ Юнит 4
1 Тестовая аннотация @Контрольная работа @Контрольная работа
2 Выполняется до вызова первого тестового метода в текущем классе. @BeforeClass @BeforeClass
3 Выполняется после всех тестовых методов в текущем классе. @После занятий @После занятий
4 Выполняется перед каждым методом тестирования @BeforeMethod @Перед
5 Выполняется после каждого метода тестирования @AfterMethod @После
6 аннотация, чтобы игнорировать тест @Test (включить = ложь) @игнорировать
7 аннотация для исключения @Test(expectedExceptions = 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

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