본문으로 이동

TestNG

위키백과, 우리 모두의 백과사전.
TestNG
개발자세드리크 뵈스트(Cédric Beust), TestNG 팀
안정화 버전
7.11 / 2025년 2월 12일(11개월 전)(2025-02-12)[1]
저장소
프로그래밍 언어자바
운영 체제크로스 플랫폼
종류유닛 테스트 도구
라이선스아파치 라이선스 2.0[2]
웹사이트testng.org

TestNGJUnitNUnit에서 영감을 얻어 세드리크 뵈스트가 만든 자바 프로그래밍 언어용 테스트 프레임워크다. TestNG의 설계 목표는 더 강력하고 사용하기 쉬운 기능을 통해 유닛, 기능, 엔드투엔드(end-to-end), 통합 등 더 넓은 범위의 테스트 범주를 포괄하는 것이다.

특징

[편집]

TestNG의 주요 특징은 다음과 같다.

  1. 어노테이션 지원.
  2. 데이터 주도/매개변수화된 테스트 지원 (@DataProvider 및 XML 설정 사용).
  3. 동일한 테스트 클래스의 여러 인스턴스 지원 (@Factory 사용).
  4. 유연한 실행 모델. TestNG는 build.xml을 통해 앤트로 실행하거나(테스트 스위트 정의 여부와 관계없이), 시각적 결과를 제공하는 IDE 플러그인으로 실행할 수 있다. TestSuite 클래스는 존재하지 않으며, 실행할 테스트 스위트, 그룹 및 테스트는 XML 파일에 의해 정의되고 설정된다.
  5. 동시 테스트: 다양한 정책(모든 메서드를 고유한 스레드에서 실행, 테스트 클래스당 하나의 스레드 등)을 사용하여 임의의 큰 스레드 풀에서 테스트를 실행하고, 코드가 멀티스레드에 안전한지 테스트한다.
  6. 더 큰 유연성을 위해 BeanShell을 내장함.
  7. 런타임 및 로깅을 위한 기본 JDK 기능 사용 (의존성 없음).
  8. 애플리케이션 서버 테스트를 위한 의존 메서드.
  9. 분산 테스트: 슬레이브 머신에 테스트 분산 가능.

데이터 제공자

[편집]

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는 추가적인 설정 옵션과 다양한 종류의 테스트를 수행할 수 있는 능력으로 잘 알려져 있다. 어떤 것이 더 적합한지는 사용 상황과 요구 사항에 따라 달라진다.

같이 보기

[편집]

각주

[편집]
  1. | Project GitHub releases page
  2. “Apache License Version 2.0”. January 2004. 2013년 12월 21일에 원본 문서에서 보존된 문서. 
  3. “TestNG for Eclipse”. 
  4. JUnitReport 보관됨 2010-02-24 - 웨이백 머신
  5. ReportNG 1.0 Final Released
  6. PDFngreport 1.0.0
  7. TestNG XSL Reports
  8. “Announcing TestNG 4.6”. 2010년 12월 12일에 원본 문서에서 보존된 문서. 2010년 3월 4일에 확인함. 
  9. “Junit vs TestNG”. stackoverflow.com. 
  10. “JUnit vs TestNG”. stackoverflow.com. 2014년 2월 2일에 원본 문서에서 보존된 문서. 
  11. “Which UnitTest framework to learn for Java now?”. stackoverflow.com. 
  12. “Writing Tests - Annotations”. 《junit.org》. 
  13. “What is TestNG?”. qacreators.com. 
  14. “JUnit 5 User Guide”. 《junit.org》. 

외부 링크

[편집]