TestNG vs JUnit - Разница между ними

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

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

Что такое TestNG?

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

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

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

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

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

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

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

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

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

Аннотации

Оба формата JUnit и TestNG использует аннотации, и почти все аннотации выглядят одинаково.

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

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

SNA Описание TestNG JUnit 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

In TestNG, XML-файл или «@DataProvider» используется для предоставления параметра для тестирования.

Здесь аннотации @Parameters, объявленной в методе, нужен параметр для тестирования. Данные, используемые в качестве параметра, будут предоставлены в TestNGXML-файлы конфигурации. Сделав это, мы можем повторно использовать один Тестовый кейс с разными наборами данных, и мы можем получить разные результаты.

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

Подведем итог этой публикации следующим образом: