TestNG
| 개발자 | 세드리크 뵈스트(Cédric Beust), TestNG 팀 |
|---|---|
| 안정화 버전 | 7.11
/ 2025년 2월 12일[1] |
| 저장소 | |
| 프로그래밍 언어 | 자바 |
| 운영 체제 | 크로스 플랫폼 |
| 종류 | 유닛 테스트 도구 |
| 라이선스 | 아파치 라이선스 2.0[2] |
| 웹사이트 | testng |
TestNG는 JUnit과 NUnit에서 영감을 얻어 세드리크 뵈스트가 만든 자바 프로그래밍 언어용 테스트 프레임워크다. TestNG의 설계 목표는 더 강력하고 사용하기 쉬운 기능을 통해 유닛, 기능, 엔드투엔드(end-to-end), 통합 등 더 넓은 범위의 테스트 범주를 포괄하는 것이다.
특징
[편집]TestNG의 주요 특징은 다음과 같다.
- 어노테이션 지원.
- 데이터 주도/매개변수화된 테스트 지원 (
@DataProvider및 XML 설정 사용). - 동일한 테스트 클래스의 여러 인스턴스 지원 (
@Factory사용). - 유연한 실행 모델. TestNG는 build.xml을 통해 앤트로 실행하거나(테스트 스위트 정의 여부와 관계없이), 시각적 결과를 제공하는 IDE 플러그인으로 실행할 수 있다.
TestSuite클래스는 존재하지 않으며, 실행할 테스트 스위트, 그룹 및 테스트는 XML 파일에 의해 정의되고 설정된다. - 동시 테스트: 다양한 정책(모든 메서드를 고유한 스레드에서 실행, 테스트 클래스당 하나의 스레드 등)을 사용하여 임의의 큰 스레드 풀에서 테스트를 실행하고, 코드가 멀티스레드에 안전한지 테스트한다.
- 더 큰 유연성을 위해 BeanShell을 내장함.
- 런타임 및 로깅을 위한 기본 JDK 기능 사용 (의존성 없음).
- 애플리케이션 서버 테스트를 위한 의존 메서드.
- 분산 테스트: 슬레이브 머신에 테스트 분산 가능.
데이터 제공자
[편집]TestNG의 데이터 제공자(Data provider)는 테스트 클래스 내의 메서드로, 의존하는 테스트 메서드에 다양한 실제 값 배열을 제공한다.
예시:
// 이 메서드는 데이터 제공자 이름이 "provider1"이라고 선언한 모든 테스트 메서드에 데이터를 제공한다.
@DataProvider(name = "provider1")
public Object[][] createData1() {
return new Object[][] {
{ "Cedric", new Integer(36) },
{ "Anne", new Integer(37) }
};
}
// 이 테스트 메서드는 "provider1"이라는 이름의 데이터 제공자로부터 데이터를 공급받아야 함을 선언한다.
@Test(dataProvider = "provider1")
public void verifyData1(String n1, Integer n2) {
System.out.println(n1 + " " + n2);
}
// 매개변수 배열의 반복자(iterator)를 반환하는 데이터 제공자.
@DataProvider(name = "provider2")
public Iterator<Object[]> createData() {
return new MyIterator(...);
}
// java.lang.reflect.Method 타입의 인수를 가진 데이터 제공자.
// 여러 테스트 메서드가 동일한 제공자를 사용하고,
// 서비스를 제공하는 테스트 메서드에 따라 서로 다른 값을 반환하려는 경우 특히 유용하다.
@DataProvider(name = "provider3")
public Object[][] createData(Method m) {
System.out.println(m.getName());
return new Object[][] { new Object[] { "Cedric" } };
}
데이터 제공자의 반환 타입은 다음 두 가지 중 하나일 수 있다.
- 객체 배열의 배열(
Object[][]): 첫 번째 차원의 크기는 테스트 메서드가 호출될 횟수이고, 두 번째 차원은 테스트 메서드의 매개변수 타입과 호환되어야 하는 객체 배열을 포함한다. Iterator<Object[]>:Object[][]와의 유일한 차이점은 반복자를 통해 테스트 데이터를 지연 생성(lazily)할 수 있다는 것이다. TestNG는 반복자를 호출한 다음, 이 반복자가 반환한 매개변수를 사용하여 테스트 메서드를 하나씩 호출한다. 이는 메서드에 전달할 매개변수 세트가 많고 이를 미리 모두 생성하고 싶지 않을 때 특히 유용하다.
도구 지원
[편집]TestNG는 기본적으로 또는 플러그인을 통해 Eclipse, IntelliJ IDEA, 넷빈즈 등 세 가지 주요 자바 IDE에서 모두 지원된다. 또한 아파치 앤트를 위한 커스텀 태스크가 포함되어 있으며 메이븐 빌드 시스템에서도 지원된다. 허드슨 지속적 통합 서버는 TestNG를 기본적으로 지원하며 시간에 따른 테스트 결과를 추적하고 차트로 나타낼 수 있다. Cobertura와 같은 대부분의 자바 코드 커버리지 도구도 TestNG와 원활하게 작동한다.
참고: Eclipse용 TestNG 지원은 Eclipse 버전 2018-09 (4.9)까지만 Eclipse Marketplace에 내장되어 있다. 이후 버전의 Eclipse에서는 TestNG 사이트의 지침에 따라 TestNG를 수동으로 설치해야 한다.[3]
보고 기능
[편집]TestNG는 HTML 및 XML 형식의 테스트 보고서를 생성한다. XML 출력은 JUnit을 사용할 때 얻는 것과 유사한 보고서를 생성하기 위해 Ant JUnitReport 태스크[4]에 의해 변환될 수 있다. 버전 4.6부터 TestNG는 ReportNG,[5] PDFngreport,[6] TestNG-XSLT[7]와 같은 서드파티 보고서 생성기를 사용할 수 있게 해주는 리포터 API[8]를 제공한다.
JUnit과의 비교
[편집]TestNG는 JUnit 테스트 자동화 프레임워크와 오랜 경쟁 관계에 있다. 각각은 차이점과 각자의 장점을 가지고 있다. 스택 오버플로의 토론들이 이러한 논쟁을 반영한다.[9][10][11]
어노테이션
[편집]JUnit 5에서 @BeforeAll 및 @AfterAll 메서드는 대부분의 상황에서 static으로 선언되어야 한다.[12] TestNG에는 이러한 제약이 없다.
TestNG에는 테스트 스위트 및 그룹을 위한 4개의 추가 설정/해제 어노테이션 쌍이 포함되어 있다: @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest, @BeforeGroup 및 @AfterGroup, @BeforeMethod 및 @AfterMethod. TestNG는 또한 셀레늄을 사용하여 애플리케이션 테스트를 자동화하는 기능을 지원한다.
매개변수화된 테스트
[편집]매개변수화된 테스트는 두 도구 모두에 구현되어 있지만 방식은 상당히 다르다.
TestNG는 테스트 메서드에 다양한 매개변수 값을 제공하는 두 가지 방법이 있다: testng.xml을 설정하는 방법과 @DataProvider 메서드를 정의하는 방법이다.[13]
JUnit 5에서 @ParameterizedTest 어노테이션은 매개변수화된 테스트를 가능하게 한다. 이 어노테이션은 @ValueSource 또는 @EnumSource와 같이 매개변수 인수의 소스를 선언하는 다른 어노테이션과 결합된다. @ArgumentsSource를 사용하면 사용자가 더 동적인 ArgumentsProvider를 구현할 수 있다.[14] JUnit 4에서는 @RunWith와 @Parameters가 매개변수화된 테스트를 용이하게 하는 데 사용되며, 여기서 @Parameters 메서드는 매개변수화된 값이 포함된 List[]를 반환해야 하고, 이 값들은 테스트 클래스 생성자에 주입된다.
결론
[편집]사용자마다 한 프레임워크 또는 다른 프레임워크의 특정 기능을 선호하는 경우가 많다. JUnit은 더 널리 보급되어 있으며 종종 주요 IDE에 기본적으로 포함되어 제공된다. TestNG는 추가적인 설정 옵션과 다양한 종류의 테스트를 수행할 수 있는 능력으로 잘 알려져 있다. 어떤 것이 더 적합한지는 사용 상황과 요구 사항에 따라 달라진다.
같이 보기
[편집]각주
[편집]- ↑ | Project GitHub releases page
- ↑ “Apache License Version 2.0”. January 2004. 2013년 12월 21일에 원본 문서에서 보존된 문서.
- ↑ “TestNG for Eclipse”.
- ↑ JUnitReport 보관됨 2010-02-24 - 웨이백 머신
- ↑ ReportNG 1.0 Final Released
- ↑ PDFngreport 1.0.0
- ↑ TestNG XSL Reports
- ↑ “Announcing TestNG 4.6”. 2010년 12월 12일에 원본 문서에서 보존된 문서. 2010년 3월 4일에 확인함.
- ↑ “Junit vs TestNG”. stackoverflow.com.
- ↑ “JUnit vs TestNG”. stackoverflow.com. 2014년 2월 2일에 원본 문서에서 보존된 문서.
- ↑ “Which UnitTest framework to learn for Java now?”. stackoverflow.com.
- ↑ “Writing Tests - Annotations”. 《junit.org》.
- ↑ “What is TestNG?”. qacreators.com.
- ↑ “JUnit 5 User Guide”. 《junit.org》.