TestNG와 JUnit – 차이점

TestNG와 JUnit의 주요 차이점

  • TestNG는 Java 기반 프레임워크인 반면, JUnit은 JAVA용 오픈 소스 단위 테스트 프레임워크입니다.
  • TestNG와 JUnit을 비교하면 TestNG 주석은 JUnit보다 사용하고 이해하기 쉽습니다.
  • TestNG를 사용하면 병렬 테스트를 생성할 수 있지만 JUnit은 병렬 테스트 실행을 지원하지 않습니다.
  • TestNG에서는 테스트 케이스를 그룹화할 수 있지만 JUnit에서는 테스트를 그룹화하는 것이 불가능합니다.
TestNG 대 JUnit
TestNG 대 JUnit

TestNG는 무엇입니까?

테스트NG NG는 "Next Generation"을 의미하는 자동화 테스트 프레임워크입니다. TestNG는 다음에서 영감을 받았습니다. JUnit 주석(@)을 사용합니다. TestNG는 JUnit의 단점을 극복하고 다음과 같이 설계되었습니다. 종단 간 테스트 쉽게.

TestNG를 사용하면 적절한 보고서를 생성할 수 있으며, 얼마나 많은 테스트 사례가 통과, 실패, 건너뛰었는지 쉽게 알 수 있습니다. 실패한 테스트 사례를 별도로 실행할 수 있습니다.

주닛이란 무엇입니까?

JUnit은 오픈 소스 유닛입니다. 지원 JAVA용 프레임워크. 유용합니다 자바 개발자는 반복 가능한 테스트를 작성하고 실행합니다. Erich Gamma와 Kent Beck이 처음에 이를 개발했습니다. xUnit의 인스턴스입니다. archi강의. 이름에서 알 수 있듯이 용도는 다음과 같습니다. 단위 테스트 작은 코드 덩어리.

팔로우하는 개발자들wing 테스트 기반 방법론은 코드를 작성하기 전에 먼저 단위 테스트를 작성하고 실행해야 합니다.

코드 작업이 완료되면 모든 테스트를 실행해야 하며 테스트는 통과해야 합니다. 코드가 추가될 때마다 모든 테스트 사례를 다시 실행하고 손상된 부분이 없는지 확인해야 합니다.

JUnit과 TestNG의 차이점

TestNG와 JUnit4는 하나 또는 두 개의 기능을 제외하고 유사해 보입니다. 어떤 기술이 단위 테스트에 더 유리한지 빠르게 결정하기 위해 두 가지를 비교해 보겠습니다. 아래 표에는 두 가지 모두에서 지원되는 기능이 강조되어 있습니다.

JUnit과 TestNG의 차이점

주석

JUnit과 TestNG는 모두 주석을 사용하며 거의 모든 주석이 비슷해 보입니다.

TestNG는 JUnit4의 @Before,@After와 유사한 @BeforeMethod,@AfterMethod를 사용합니다.

TestNG와 Junit4는 모두 시간 제한에 @Test(timeout = 1000)를 사용합니다. 자세한 내용은 아래 표를 확인하세요.tails-

SN 상품 설명 테스트NG JUnit 4
1 테스트 주석 @테스트 @테스트
2 현재 클래스에서 첫 번째 테스트 메서드가 호출되기 전에 실행됩니다. 뿡 빵뀨 뿡 빵뀨
3 현재 클래스의 모든 테스트 메서드 이후에 실행됩니다. @방과후 @방과후
4 각 테스트 메서드 전에 실행됩니다. 안녕하세요. @전에
5 각 테스트 메서드 후에 실행됩니다. 안녕하세요. @후에
6 테스트를 무시하는 주석 @Test(활성화=false) @무시하다
7 예외에 대한 주석 @Test(expectedExceptions = ArithmeticException.class) @Test(예상 = ArithmeticException.class)
8 시간 제한 @Test(시간 초과 = 1000) @Test(시간 초과 = 1000)
9 제품군의 모든 테스트 전에 실행됩니다. 안녕하세요. N / A
10 제품군의 모든 테스트 후에 실행됩니다. @애프터스위트 N / A
11 테스트가 실행되기 전에 실행됩니다. @BeforeTest N / A
12 테스트 실행 후 실행 @애프터테스트 N / A
13 이러한 그룹 중 하나에 속하는 첫 번째 테스트 메서드가 호출되기 전에 실행됩니다. 안녕하세요. N / A
14 여기의 그룹 중 하나에 속하는 마지막 테스트 방법 후에 실행하십시오. @AfterGroups N / A

스위트 테스트

스위트는 여러 테스트를 함께 실행하는 데 사용됩니다. 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 사용

아래 코드 조각은 JUnit4로 작업하는 동안 @ignore 주석 사용을 설명합니다.

@Ignore
public void method1() 
{
	System.out.println("Using @Ignore , this execution is ignored");
}

TestNG 사용

아래 코드 조각은 TestNG로 작업하는 동안 @Test(enabled=false) 주석 사용을 설명합니다.

@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 주석에는 테스트용 매개변수가 필요합니다. 매개변수로 사용되는 데이터는 TestNG의 XML 구성 파일에 제공됩니다. 이렇게 하면 단일 항목을 재사용할 수 있습니다. 테스트 케이스 다른 데이터 세트를 사용하면 다른 결과를 얻을 수 있습니다.

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 비교를 de에서 보았습니다.tails. 또한 매개변수화된 테스트와 종속성 테스트를 제외하면 둘 다 유사하다는 것을 확인했습니다. 간단히 말해서 유연성과 요구 사항에 따라 단위 테스트를 위해 둘 중 하나를 선택할 수 있다고 말할 수 있습니다.