TestNG-퀵 가이드
테스트는 요구 사항에 따라 작동하는지 확인하기 위해 응용 프로그램의 기능을 확인하는 프로세스입니다. 단위 테스트는 최종 제품이 요구 사항을 충족하는지 확인하기 위해 모든 단일 엔터티 (클래스 또는 메서드)를 테스트하기 위해 적절한 조치를 취하는 개발자 수준에서 그림으로 나타납니다.
JUnit은 개발자가 다른 테스트 프레임 워크와 비교할 때 테스트, 특히 단위 테스트의 유용성을 이해하도록 유도했습니다. 다소 단순하고 실용적이며 엄격한 아키텍처를 활용하여 JUnit은 많은 개발자를 "감염"시킬 수있었습니다. JUnit의 기능을 잘 이해하려면 튜토리얼을 참조하십시오. 동시에 JUnit에는 다음과 같은 몇 가지 단점이 있습니다.
처음에는 단위 테스트 만 가능하도록 설계되었지만 이제는 모든 종류의 테스트에 사용됩니다.
종속성 테스트를 수행 할 수 없습니다.
구성 제어 불량 (setUp / tearDown).
Intrusive (클래스를 확장하고 메서드 이름을 특정 방식으로 지정해야 함).
정적 프로그래밍 모델 (불필요하게 다시 컴파일해야 함)
복잡한 프로젝트에서 여러 테스트 모음을 관리하는 것은 매우 까다로울 수 있습니다.
TestNG는 무엇입니까?
문서에 따른 TestNG의 정의는 다음과 같습니다.
TestNG는 JUnit 및 NUnit에서 영감을 얻은 테스트 프레임 워크이지만 더 강력하고 사용하기 쉽게 만드는 몇 가지 새로운 기능을 소개합니다.
TestNG는 오픈 소스 자동 테스트 프레임 워크입니다. 어디NG 방법 N내선G에너지. TestNG는 JUnit (특히 JUnit 4)과 유사하지만 JUnit 확장이 아닙니다. JUnit에서 영감을 얻었습니다. 특히 통합 클래스를 테스트 할 때 JUnit보다 우수하도록 설계되었습니다. TestNG의 창시자는 Cedric Beust 입니다.
이전 프레임 워크의 한계를 대부분 제거하는 TestNG는 개발자에게 더 유연하고 강력한 테스트를 작성할 수있는 기능을 제공합니다. 테스트를 정의하기 위해 Java Annotations (JDK 5.0에 도입 됨)에서 많이 빌려 왔기 때문에 실제 프로덕션 환경에서 Java 언어의이 새로운 기능을 사용하는 방법을 보여줄 수도 있습니다.
TestNG 기능
주석을 지원합니다.
TestNG는 더 많은 Java 및 OO 기능을 사용합니다.
통합 클래스 테스트를 지원합니다 (예 : 기본적으로 모든 테스트 메서드에 대해 새 테스트 클래스 인스턴스를 만들 필요가 없음).
런타임 구성 / 데이터 정보에서 컴파일 타임 테스트 코드를 분리합니다.
유연한 런타임 구성.
'테스트 그룹'을 소개합니다. 테스트를 컴파일 한 후에는 TestNG에게 모든 "프론트 엔드"테스트 또는 "빠른", "느린", "데이터베이스"테스트 등을 실행하도록 요청할 수 있습니다.
종속 테스트 방법, 병렬 테스트, 부하 테스트 및 부분 실패를 지원합니다.
유연한 플러그인 API.
다중 스레드 테스트 지원.
TestNG는 Java 용 프레임 워크이므로 첫 번째 요구 사항은 시스템에 JDK를 설치하는 것입니다.
시스템 요구 사항
JDK | 1.5 이상. |
기억 | 최소 요구 사항이 없습니다. |
디스크 공간 | 최소 요구 사항이 없습니다. |
운영 체제 | 최소 요구 사항이 없습니다. |
1 단계-시스템에서 Java 설치 확인
콘솔을 열고 시스템에 설치 한 운영 체제에 따라 java 명령을 실행하십시오.
OS | 직무 | 명령 |
---|---|---|
윈도우 | 명령 콘솔 열기 | c : \> 자바 버전 |
리눅스 | 명령 터미널 열기 | $ 자바 버전 |
맥 | 터미널 열기 | 기계 : ~ joseph $ java -version |
모든 운영 체제의 출력을 확인하겠습니다.
OS | 산출 |
---|---|
윈도우 | 자바 버전 "1.7.0_25" Java (TM) SE 런타임 환경 (빌드 1.7.0_25-b15) Java HotSpot (TM) 64 비트 서버 VM (빌드 23.25-b01, 혼합 모드) |
리눅스 | 자바 버전 "1.7.0_25" Java (TM) SE 런타임 환경 (빌드 1.7.0_25-b15) Java HotSpot (TM) 64 비트 서버 VM (빌드 23.25-b01, 혼합 모드) |
맥 | 자바 버전 "1.7.0_25" Java (TM) SE 런타임 환경 (빌드 1.7.0_25-b15) Java HotSpot (TM) 64 비트 서버 VM (빌드 23.25-b01, 혼합 모드) |
Java가없는 경우 다음에서 Java SDK (Software Development Kit)를 설치하십시오. https://www.oracle.com/technetwork/java/javase/downloads/index.html. 이 자습서에서는 Java 1.7.0_25를 설치 버전으로 가정합니다.
2 단계 : JAVA 환경 설정
설정 JAVA_HOME환경 변수는 Java가 시스템에 설치된 기본 디렉토리 위치를 가리 킵니다. 예를 들면
OS | 산출 |
---|---|
윈도우 | 환경 변수 JAVA_HOME을 C : \ Program Files \ Java \ jdk1.7.0_25로 설정합니다. |
리눅스 | JAVA_HOME = / usr / local / java-current를 내 보냅니다. |
맥 | JAVA_HOME = / Library / Java / Home을 내 보냅니다. |
시스템 경로에 Java 컴파일러 위치를 추가합니다.
OS | 산출 |
---|---|
윈도우 | 시스템 변수 Path 끝에 C : \ Program Files \ Java \ jdk1.7.0_25 \ bin 문자열을 추가합니다. |
리눅스 | 내보내기 PATH =$PATH:$JAVA_HOME / bin / |
맥 | 필요하지 않음 |
명령을 사용하여 Java 설치 확인 java -version 위에서 설명한대로.
3 단계 : TestNG 아카이브 다운로드
다음에서 최신 버전의 TestNG jar 파일을 다운로드합니다. http://www.testng.org. 이 튜토리얼을 작성할 때 testng-6.8.jar 을 다운로드 하여 C : \> TestNG 폴더에 복사했습니다.
OS | 아카이브 이름 |
---|---|
윈도우 | testng-6.8.jar |
리눅스 | testng-6.8.jar |
맥 | testng-6.8.jar |
4 단계 : TestNG 환경 설정
설정 TESTNG_HOMETestNG jar가 컴퓨터에 저장되는 기본 디렉토리 위치를 가리키는 환경 변수. 다음 표는 C : \> TestNG 위치에 testng-6.8.jar을 저장했다고 가정하고 Windows, Linux 및 Mac에서 환경 변수를 설정하는 방법을 보여줍니다.
OS | 기술 |
---|---|
윈도우 | 환경 변수 TESTNG_HOME을 C : \ TESTNG로 설정합니다. |
리눅스 | TESTNG_HOME = / usr / local / TESTNG 내보내기 |
맥 | TESTNG_HOME = / Library / TESTNG 내보내기 |
5 단계 : CLASSPATH 변수 설정
설정 CLASSPATH TestNG jar 위치를 가리키는 환경 변수.
OS | 기술 |
---|---|
윈도우 | 환경 변수 CLASSPATH를 % CLASSPATH %; % TESTNG_HOME % \ testng-6.8.jar로 설정합니다. |
리눅스 | 내보내기 CLASSPATH =$CLASSPATH:$TESTNG_HOME / testng-6.8.jar. |
맥 | 내보내기 CLASSPATH =$CLASSPATH:$TESTNG_HOME / testng-6.8.jar. |
6 단계 : TestNG 설정 테스트
TestNGSimpleTest라는 Java 클래스 파일을 다음 위치에 만듭니다. C:\>TestNG_WORKSPACE.
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public class TestNGSimpleTest {
@Test
public void testAdd() {
String str = "TestNG is working fine";
AssertEquals("TestNG is working fine", str);
}
}
TestNG는 여러 가지 방법으로 호출 할 수 있습니다.
- testng.xml 파일 사용.
- ANT와 함께.
- 명령 줄에서.
testng.xml 파일을 사용하여 호출하겠습니다. testng.xml이라는 이름으로 xml 파일을 만듭니다.C:\>TestNG_WORKSPACE 테스트 케이스를 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "TestNGSimpleTest"/>
</classes>
</test>
</suite>
7 단계 : 결과 확인
다음을 사용하여 클래스 컴파일 javac 다음과 같이 컴파일러-
C:\TestNG_WORKSPACE>javac TestNGSimpleTest.java
이제 testng.xml을 호출하여 결과를 확인하십시오.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오.
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG에서 테스트를 작성하는 것은 기본적으로 다음 단계를 포함합니다.
테스트의 비즈니스 로직을 작성하고 코드에 TestNG 주석을 삽입합니다.
testng.xml 파일 또는 build.xml에 테스트에 대한 정보 (예 : 클래스 이름, 실행하려는 그룹 등)를 추가합니다.
TestNG를 실행합니다.
여기서는 POJO 클래스, 비즈니스 로직 클래스 및 TestNG에 의해 실행될 테스트 xml을 사용하는 TestNG 테스트의 완전한 예제를 볼 수 있습니다.
창조하다 EmployeeDetails.java 에 C:\>TestNG_WORKSPACE, 이는 POJO 클래스입니다.
public class EmployeeDetails {
private String name;
private double monthlySalary;
private int age;
// @return the name
public String getName() {
return name;
}
// @param name the name to set
public void setName(String name) {
this.name = name;
}
// @return the monthlySalary
public double getMonthlySalary() {
return monthlySalary;
}
// @param monthlySalary the monthlySalary to set
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
// @return the age
public int getAge() {
return age;
}
// @param age the age to set
public void setAge(int age) {
this.age = age;
}
}
EmployeeDetails 클래스는-
- 직원 이름 값을 가져 오거나 설정합니다.
- 직원의 월급 값을 가져 오거나 설정합니다.
- 직원의 나이 값을 얻거나 설정합니다.
만들기 EmpBusinessLogic.java 에 C:\>TestNG_WORKSPACE, 비즈니스 로직을 포함합니다.
public class EmpBusinessLogic {
// Calculate the yearly salary of employee
public double calculateYearlySalary(EmployeeDetails employeeDetails) {
double yearlySalary = 0;
yearlySalary = employeeDetails.getMonthlySalary() * 12;
return yearlySalary;
}
// Calculate the appraisal amount of employee
public double calculateAppraisal(EmployeeDetails employeeDetails) {
double appraisal = 0;
if(employeeDetails.getMonthlySalary() < 10000) {
appraisal = 500;
} else {
appraisal = 1000;
}
return appraisal;
}
}
EmpBusinessLogic 클래스는 계산에 사용됩니다-
- 직원의 연봉.
- 직원의 평가 금액.
이제 TestNG 클래스를 만들어 보겠습니다. TestEmployeeDetails.javaC : \> TestNG_WORKSPACE. TestNG 클래스는 하나 이상의 TestNG 주석을 포함하는 Java 클래스입니다. 이 클래스는 테스트 할 테스트 케이스를 포함합니다. TestNG 테스트는 @BeforeXXX 및 @AfterXXX 주석으로 구성 할 수 있으며 (TestNG- 실행 절차 장에서 확인할 수 있음), 특정 지점 전후에 일부 Java 로직을 수행 할 수 있습니다.
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestEmployeeDetails {
EmpBusinessLogic empBusinessLogic = new EmpBusinessLogic();
EmployeeDetails employee = new EmployeeDetails();
@Test
public void testCalculateAppriasal() {
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double appraisal = empBusinessLogic.calculateAppraisal(employee);
Assert.assertEquals(500, appraisal, 0.0, "500");
}
// Test to check yearly salary
@Test
public void testCalculateYearlySalary() {
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double salary = empBusinessLogic.calculateYearlySalary(employee);
Assert.assertEquals(96000, salary, 0.0, "8000");
}
}
TestEmployeeDetails 클래스는 방법을 테스트하는 데 사용됩니다. EmpBusinessLogic수업. 다음을 수행합니다.
직원의 연봉을 테스트합니다.
직원의 평가 금액을 테스트합니다.
테스트를 실행하기 전에 일반적으로 testng.xml이라는 특수 XML 파일을 사용하여 TestNG를 구성해야합니다. 이 파일의 구문은 매우 간단하며 그 내용은 다음과 같습니다. 이 파일 만들기C:\>TestNG_WORKSPACE.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "TestEmployeeDetails"/>
</classes>
</test>
</suite>
위 파일의 내용은 다음과 같습니다.
제품군은 하나의 XML 파일로 표시됩니다. 하나 이상의 테스트를 포함 할 수 있으며 <suite> 태그로 정의됩니다.
태그 <test>는 하나의 테스트를 나타내며 하나 이상의 TestNG 클래스를 포함 할 수 있습니다.
<class> 태그는 TestNG 클래스를 나타냅니다. 하나 이상의 TestNG 주석을 포함하는 Java 클래스입니다. 하나 이상의 테스트 방법을 포함 할 수 있습니다.
javac를 사용하여 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac EmployeeDetails.java EmpBusinessLogic.java TestEmployeeDetails.java
이제 다음 명령으로 TestNG-
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
모든 작업이 올바르게 완료되면 콘솔에서 테스트 결과를 볼 수 있습니다. 또한 TestNG는 폴더에 매우 멋진 HTML 보고서를 생성합니다.test-output현재 디렉토리에 자동으로 생성됩니다. 그것을 열고 index.html을로드하면 아래 이미지와 유사한 페이지가 표시됩니다.
JUnit 3에서 테스트 메소드를 표시하는 전통적인 방법은 이름 앞에 test를 붙이는 것입니다. 이것은 클래스의 특정 메서드에 특별한 의미가 있다고 태그를 지정하는 데 매우 효과적인 방법이지만 이름 지정이 잘 확장되지 않고 (다른 프레임 워크에 대해 더 많은 태그를 추가하려면 어떻게해야합니까?) 다소 융통성이 없습니다 (만약 우리가 테스트 프레임 워크에 추가 매개 변수를 전달 하시겠습니까?).
주석은 JDK 5의 Java 언어에 공식적으로 추가되었으며 TestNG는 주석을 사용하여 테스트 클래스에 주석을 달도록 선택했습니다.
다음은 TestNG가 지원하는 주석 목록입니다.
Sr. 아니. | 주석 및 설명 |
---|---|
1 | @BeforeSuite 주석이 달린 메서드는이 제품군의 모든 테스트가 실행되기 전에 한 번만 실행됩니다. |
2 | @AfterSuite 주석이 달린 메서드는이 제품군의 모든 테스트가 실행 된 후 한 번만 실행됩니다. |
삼 | @BeforeClass 주석이 달린 메서드는 현재 클래스의 첫 번째 테스트 메서드가 호출되기 전에 한 번만 실행됩니다. |
4 | @AfterClass 주석이 달린 메서드는 현재 클래스의 모든 테스트 메서드가 실행 된 후 한 번만 실행됩니다. |
5 | @BeforeTest 주석이 달린 메소드는 <test> 태그 내의 클래스에 속하는 테스트 메소드가 실행되기 전에 실행됩니다. |
6 | @AfterTest 주석이 추가 된 메서드는 <test> 태그 내의 클래스에 속하는 모든 테스트 메서드가 실행 된 후에 실행됩니다. |
7 | @BeforeGroups 이 구성 방법이 이전에 실행될 그룹 목록입니다. 이 메서드는 이러한 그룹에 속하는 첫 번째 테스트 메서드가 호출되기 직전에 실행됩니다. |
8 | @AfterGroups 이 구성 방법이 실행될 그룹 목록입니다. 이 메서드는 이러한 그룹에 속하는 마지막 테스트 메서드가 호출 된 직후에 실행됩니다. |
9 | @BeforeMethod 주석이 달린 메소드는 각 테스트 메소드 전에 실행됩니다. |
10 | @AfterMethod 주석이 달린 메서드는 각 테스트 메서드 후에 실행됩니다. |
11 | @DataProvider 메서드를 테스트 메서드에 대한 데이터를 제공하는 것으로 표시합니다. 주석이 달린 메서드는 Object [] []를 반환해야합니다. 여기서 각 Object []에 테스트 메서드의 매개 변수 목록을 할당 할 수 있습니다. 이 DataProvider에서 데이터를 수신하려는 @Test 메서드는이 주석의 이름과 동일한 dataProvider 이름을 사용해야합니다. |
12 | @Factory
메서드를 TestNG에서 Test 클래스로 사용할 개체를 반환하는 팩토리로 표시합니다. 메서드는 Object []를 반환해야합니다. |
13 | @Listeners 테스트 클래스에서 리스너를 정의합니다. |
14 | @Parameters @Test 메서드에 매개 변수를 전달하는 방법을 설명합니다. |
15 | @Test 클래스 또는 메서드를 테스트의 일부로 표시합니다. |
주석 사용의 이점
다음은 주석 사용의 몇 가지 이점입니다.
TestNG는 주석을 조회하여 관심있는 메서드를 식별합니다. 따라서 메서드 이름은 패턴이나 형식으로 제한되지 않습니다.
주석에 추가 매개 변수를 전달할 수 있습니다.
주석은 강력한 형식이므로 컴파일러는 모든 실수를 즉시 표시합니다.
테스트 클래스는 더 이상 아무것도 확장 할 필요가 없습니다 (예 : JUnit 3의 경우 TestCase).
이 장에서는 TestNG의 메소드 실행 절차를 설명합니다. 호출 된 메서드의 순서를 설명합니다. 다음은 TestNG 테스트 API 메서드의 실행 절차와 예제입니다.
Java 클래스 파일 이름 만들기 TestngAnnotation.java 에 C:\>TestNG_WORKSPACE 주석을 테스트합니다.
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;
public class TestngAnnotation {
// test case 1
@Test
public void testCase1() {
System.out.println("in test case 1");
}
// test case 2
@Test
public void testCase2() {
System.out.println("in test case 2");
}
@BeforeMethod
public void beforeMethod() {
System.out.println("in beforeMethod");
}
@AfterMethod
public void afterMethod() {
System.out.println("in afterMethod");
}
@BeforeClass
public void beforeClass() {
System.out.println("in beforeClass");
}
@AfterClass
public void afterClass() {
System.out.println("in afterClass");
}
@BeforeTest
public void beforeTest() {
System.out.println("in beforeTest");
}
@AfterTest
public void afterTest() {
System.out.println("in afterTest");
}
@BeforeSuite
public void beforeSuite() {
System.out.println("in beforeSuite");
}
@AfterSuite
public void afterSuite() {
System.out.println("in afterSuite");
}
}
다음으로 파일을 생성하겠습니다. testng.xml 에 C:\>TestNG_WORKSPACE 주석을 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "TestngAnnotation"/>
</classes>
</test>
</suite>
javac를 사용하여 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac TestngAnnotation.java
이제 제공된 Test Case 클래스에 정의 된 테스트 케이스를 실행하는 testng.xml을 실행합니다.
C:\TestNG_WORKSPACE>java org.testng.TestNG testng.xml
출력을 확인하십시오.
in beforeSuite
in beforeTest
in beforeClass
in beforeMethod
in test case 1
in afterMethod
in beforeMethod
in test case 2
in afterMethod
in afterClass
in afterTest
in afterSuite
===============================================
Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================
위의 출력을 기반으로 실행 절차는 다음과 같습니다.
우선 beforeSuite () 메서드는 한 번만 실행됩니다.
마지막으로 afterSuite () 메서드는 한 번만 실행됩니다.
beforeTest (), beforeClass (), afterClass (), afterTest () 메서드도 한 번만 실행됩니다.
beforeMethod () 메서드는 각 테스트 케이스에 대해 실행되지만 테스트 케이스를 실행하기 전에 실행됩니다.
afterMethod () 메서드는 각 테스트 케이스에 대해 실행되지만 테스트 케이스를 실행 한 후에 실행됩니다.
beforeMethod ()와 afterMethod () 사이에 각 테스트 케이스가 실행됩니다.
테스트 케이스는 다음을 사용하여 실행됩니다. TestNG수업. 이 클래스는 TestNG 프레임 워크에서 테스트를 실행하기위한 기본 진입 점입니다. 사용자는 자신의 TestNG 개체를 만들고 다음과 같은 다양한 방법으로 호출 할 수 있습니다.
기존 testng.xml에서.
합성 testng.xml에서 전적으로 Java에서 생성되었습니다.
테스트 클래스를 직접 설정합니다.
또한 포함하거나 제외 할 그룹을 정의하고 매개 변수를 할당 할 수 있습니다. 명령 줄 매개 변수는 다음과 같습니다.
-d outputdir : 출력 디렉토리를 지정합니다.
-testclass class_name : 하나 또는 여러 개의 클래스 이름을 지정합니다.
-testjar jar_name : 테스트를 포함하는 jar를 지정합니다.
-sourcedir src1; src2 :; 소스 디렉토리의 분리 된 목록 (javadoc 주석이 사용되는 경우에만 사용됨).
-target
-groups
-testrunfactory
-listener
아래 예제에서 기존 testng.xml 인 TestNG 개체를 만듭니다.
수업 만들기
테스트 할 Java 클래스를 만듭니다. MessageUtil.java 에 C:\>TestNG_WORKSPACE.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
}
테스트 케이스 클래스 생성
자바 테스트 클래스를 만듭니다. SampleTest.java.
테스트 클래스에 테스트 메서드 testPrintMessage ()를 추가합니다.
testPrintMessage () 메서드에 주석 @Test를 추가합니다.
TestNG의 assertEquals API를 사용하여 테스트 조건을 구현하고 조건을 확인합니다.
라는 Java 클래스 파일을 만듭니다. SampleTest.java 에 C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class SampleTest {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
Assert.assertEquals(message, messageUtil.printMessage());
}
}
testng.xml 만들기
다음으로 testng.xml 파일을 C:\>TestNG_WORKSPACE, 테스트 케이스를 실행합니다. 이 파일은 전체 테스트를 XML로 캡처합니다. 이 파일을 사용하면 모든 테스트 스위트와 해당 매개 변수를 하나의 파일에 쉽게 설명 할 수 있으므로 코드 저장소에서 확인하거나 동료에게 이메일을 보낼 수 있습니다. 또한 테스트의 하위 집합을 쉽게 추출하거나 여러 런타임 구성을 분할 할 수 있습니다 (예 : testngdatabase.xml은 데이터베이스를 실행하는 테스트 만 실행 함).
<?xml version = "1.0" encoding = "UTF-8"?>
<suite name = "Sample test Suite">
<test name = "Sample test">
<classes>
<class name = "SampleTest" />
</classes>
</test>
</suite>
javac를 사용하여 테스트 케이스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac MessageUtil.java SampleTest.java
이제 testng.xml을 실행하면 <test> 태그에 정의 된 테스트 케이스가 실행됩니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오.
Hello World
===============================================
Sample test Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
ㅏ test suite소프트웨어 프로그램의 동작 또는 동작 집합을 테스트하기위한 테스트 사례 모음입니다. TestNG에서는 테스트 소스 코드에서 Suite를 정의 할 수 없지만 Suite는 실행 기능이므로 하나의 XML 파일로 표시됩니다. 또한 테스트 를 유연하게 구성 할 수 있습니다. 스위트는 하나 이상의 테스트를 포함 할 수 있으며 <suite> 태그로 정의됩니다.
<suite>는 testng.xml의 루트 태그입니다. 차례로 여러 <test> 섹션으로 구성된 테스트 스위트를 설명합니다.
다음 표에는 <suite>에서 허용하는 모든 법적 특성이 나열되어 있습니다.
Sr. 아니. | 속성 및 설명 |
---|---|
1 | name 이 스위트의 이름입니다. 이것은mandatory 속성. |
2 | verbose 이 실행의 수준 또는 자세한 정도입니다. |
삼 | parallel TestNG가이 스위트를 실행하기 위해 다른 스레드를 실행해야하는지 여부. |
4 | thread-count 병렬 모드가 활성화 된 경우 사용할 스레드 수입니다 (그렇지 않으면 무시 됨). |
5 | annotations 테스트에서 사용중인 주석 유형입니다. |
6 | time-out 이 테스트에서 찾은 모든 테스트 방법에 사용되는 기본 제한 시간입니다. |
이 장에서는 Test Suite를 사용하여 함께 실행하기 위해 Test1과 Test2라는 두 개의 테스트 클래스가있는 예제를 보여줍니다.
수업 만들기
테스트 할 Java 클래스를 만듭니다. MessageUtil.java 에 C:\>JUNIT_WORKSPACE.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
테스트 케이스 클래스 생성
다음과 같은 Java 클래스 파일을 만듭니다. Test1.java 에 C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class Test1 {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
Assert.assertEquals(message, messageUtil.printMessage());
}
}
다음과 같은 Java 클래스 파일을 만듭니다. Test2.java 에 C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class Test2 {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message,messageUtil.salutationMessage());
}
}
이제 testng.xml을 C:\>TestNG_WORKSPACE, 다음과 같이 <suite> 태그를 포함합니다-
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "exampletest1">
<classes>
<class name = "Test1" />
</classes>
</test>
<test name = "exampletest2">
<classes>
<class name = "Test2" />
</classes>
</test>
</suite>
Suite1 포함 사항 exampletest1 과 exampletest2.
javac를 사용하여 모든 Java 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac MessageUtil.java Test1.java Test2.java
이제 제공된 Test Case 클래스에 정의 된 테스트 케이스를 실행하는 testng.xml을 실행합니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오.
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================
테스트 출력 폴더를 확인할 수도 있습니다 . Suite1 폴더 아래에서 생성 된 두 개의 html 파일 인 exampletest1.html과 exampletest2.html을 볼 수 있습니다.
때로는 코드가 준비되지 않았고 해당 메서드 / 코드를 테스트하기 위해 작성된 테스트 케이스가 실패하는 경우가 있습니다. 이러한 경우 주석@Test(enabled = false) 이 테스트 케이스를 비활성화하는 데 도움이됩니다.
테스트 메서드에 @Test (enabled = false) 주석이 추가 되면 테스트 할 준비가되지 않은 테스트 케이스는 무시됩니다.
이제 @Test (enabled = false)가 작동하는 모습을 살펴 보겠습니다.
수업 만들기
테스트 할 Java 클래스를 만듭니다. MessageUtil.java 에 C:\>TestNG_WORKSPACE.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
테스트 케이스 클래스 생성
자바 테스트 클래스를 만듭니다. IgnoreTest.java.
테스트 메서드, testPrintMessage () 및 testSalutationMessage ()를 테스트 클래스에 추가합니다.
testPrintMessage () 메서드에 주석 @Test (enabled = false)를 추가합니다.
다음과 같은 Java 클래스 파일을 만듭니다. IgnoreTest.java 에 C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class IgnoreTest {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test(enabled = false)
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
}
testng.xml 만들기
testng.xml 만들기 C:\>TestNG_WORKSPACE 테스트 케이스를 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "IgnoreTest" />
</classes>
</test>
</suite>
javac를 사용하여 MessageUtil 및 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac MessageUtil.java IgnoreTest.java
이제 testng.xml을 실행하면 테스트 케이스 클래스에 정의 된 테스트 케이스 testPrintMessage ()가 실행되지 않습니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오. testPrintMessage () 테스트 케이스는 테스트되지 않습니다.
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
다음 장에서 설명 할 테스트 그룹을 무시할 수도 있습니다.
그룹 테스트는 JUnit 프레임 워크에 존재하지 않는 TestNG의 새로운 혁신적인 기능입니다. 이를 통해 메소드를 적절한 부분으로 디스패치하고 테스트 메소드의 정교한 그룹화를 수행 할 수 있습니다.
그룹에 속하는 메서드를 선언 할 수있을뿐만 아니라 다른 그룹을 포함하는 그룹을 지정할 수도 있습니다. 그런 다음 TestNG를 호출하여 특정 그룹 집합 (또는 정규식)을 포함하도록 요청하고 다른 집합은 제외 할 수 있습니다.
그룹 테스트는 테스트를 분할하는 방법에 최대한의 유연성을 제공하며 두 가지 다른 테스트 집합을 연속적으로 실행하려는 경우 아무것도 다시 컴파일 할 필요가 없습니다.
그룹은 <groups> 태그를 사용하여 testng.xml 파일에 지정됩니다. <test> 또는 <suite> 태그 아래에서 찾을 수 있습니다. <suite> 태그에 지정된 그룹은 아래의 모든 <test> 태그에 적용됩니다.
이제 그룹 테스트가 어떻게 작동하는지 예를 들어 보겠습니다.
수업 만들기
테스트 할 Java 클래스를 만듭니다. MessageUtil.java 에 C:\> TestNG_WORKSPACE.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "tutorialspoint" to the message
public String salutationMessage() {
message = "tutorialspoint" + message;
System.out.println(message);
return message;
}
// add "www." to the message
public String exitMessage() {
message = "www." + message;
System.out.println(message);
return message;
}
}
테스트 케이스 클래스 생성
Java 테스트 클래스 (예 : GroupTestExample.java)를 만듭니다.
테스트 클래스에 테스트 메서드 인 testPrintMessage () 및 testSalutationMessage ()를 추가합니다.
테스트 방법을 두 가지 범주로 분류-
Check-in tests (checkintest)−이 테스트는 새 코드를 제출하기 전에 실행해야합니다. 일반적으로 빠르며 기본 기능이 손상되지 않았는지 확인합니다.
Functional tests (functest) − 이러한 테스트는 소프트웨어의 모든 기능을 다루어야하며, 이상적으로는 지속적으로 실행하는 것이 좋지만 하루에 한 번 이상 실행해야합니다.
다음과 같은 Java 클래스 파일을 만듭니다. GroupTestExample.java 에 C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class GroupTestExample {
String message = ".com";
MessageUtil messageUtil = new MessageUtil(message);
@Test(groups = { "functest", "checkintest" })
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = ".com";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(groups = { "checkintest" })
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "tutorialspoint" + ".com";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test(groups = { "functest" })
public void testingExitMessage() {
System.out.println("Inside testExitMessage()");
message = "www." + "tutorialspoint"+".com";
Assert.assertEquals(message, messageUtil.exitMessage());
}
}
testng.xml 만들기
testng.xml 만들기 C:\> TestNG_WORKSPACE, 테스트 케이스를 실행합니다. 여기서는 functest 그룹에 속하는 테스트 만 실행합니다 .
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<groups>
<run>
<include name = "functest" />
</run>
</groups>
<classes>
<class name = "GroupTestExample" />
</classes>
</test>
</suite>
javac를 사용하여 MessageUtil, 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac MessageUtil.java GroupTestExample.java
이 그룹에 속하는으로 이제 만 방법 testPrintMessage을 (실행됩니다 testng.xml를) 실행 functest .
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오. testPrintMessage () 메소드 만 실행됩니다.
Inside testPrintMessage()
.com
Inside testExitMessage()
www..com
===============================================
Suite1
Total tests run: 2, Failures: 1, Skips: 0
===============================================
그룹 그룹
그룹에는 다른 그룹도 포함될 수 있습니다. 이 그룹은MetaGroups. 예를 들어 checkintest 및 functest 를 포함 하는 그룹을 모두 정의 할 수 있습니다 . testng.xml 파일을 다음과 같이 수정 해 보겠습니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<groups>
<define name = "all">
<include name = "functest"/>
<include name = "checkintest"/>
</define>
<run>
<include name = "all"/>
</run>
</groups>
<classes>
<class name = "GroupTestExample" />
</classes>
</test>
</suite>
위의 testng.xml을 실행하면 세 가지 테스트가 모두 실행되고 다음과 같은 결과가 나타납니다.
Inside testPrintMessage()
.com
Inside testSalutationMessage()
tutorialspoint.com
Inside testExitMessage()
www.tutorialspoint.com
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
제외 그룹
아래와 같이 <exclude> 태그를 사용하여 그룹을 무시할 수 있습니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<groups>
<define name = "all">
<exclude name = "functest"/>
<include name = "checkintest"/>
</define>
<run>
<include name = "all"/>
</run>
</groups>
<classes>
<class name = "GroupTestExample" />
</classes>
</test>
</suite>
TestNG는 코드의 예외 처리를 추적하는 옵션을 제공합니다. 코드에서 원하는 예외가 발생하는지 여부를 테스트 할 수 있습니다. 여기expectedExceptions매개 변수는 @Test 주석과 함께 사용됩니다. 자, 보자@Test(expectedExceptions) 행동.
수업 만들기
테스트 할 Java 클래스를 만듭니다. MessageUtil.java 에 C:\> TestNG_WORKSPACE. printMessage () 메서드 내부에 오류 조건을 추가합니다.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public void printMessage() {
System.out.println(message);
int a =0;
int b = 1/a;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
테스트 케이스 클래스 생성
자바 테스트 클래스를 만듭니다. ExpectedExceptionTest.java.
testPrintMessage () 테스트 케이스에 예상되는 예외 ArithmeticException을 추가하십시오.
다음과 같은 Java 클래스 파일을 만듭니다. ExpectedExceptionTest.java 에 C:\> TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class ExpectedExceptionTest {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test(expectedExceptions = ArithmeticException.class)
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message,messageUtil.salutationMessage());
}
}
테스트 실행기 만들기
testng.xml 만들기 C:\>TestNG_WORKSPACE 테스트 케이스를 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "ExpectedExceptionTest" />
</classes>
</test>
</suite>
javac를 사용하여 MessageUtil, 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac MessageUtil.java TestJunit.java
이제 제공된 Test Case 클래스에 정의 된 테스트 케이스를 실행하는 Test Runner를 실행합니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오. testPrintMessage () 테스트 케이스가 통과됩니다.
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================
때로는 테스트 케이스에서 특정 순서로 메서드를 호출해야하거나 메서드간에 일부 데이터와 상태를 공유해야 할 수도 있습니다. 이러한 종류의 종속성은 테스트 메서드 간의 명시 적 종속성 선언을 지원하므로 TestNG에서 지원합니다.
TestNG를 사용하면 다음과 같이 종속성을 지정할 수 있습니다.
@Test 주석에서 속성 dependentOnMethods 사용 또는.
@Test 주석에서 속성 dependentOnGroups 를 사용합니다 .
DependOnMethods를 사용하는 예
수업 만들기
테스트 할 Java 클래스를 만듭니다. MessageUtil.java 에 C:\>TestNG_WORKSPACE.
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
테스트 케이스 클래스 생성
Java 테스트 클래스 (예 : DependencyTestUsingAnnotation.java)를 만듭니다.
테스트 메서드, testPrintMessage () 및 testSalutationMessage () 및 initEnvironmentTest ()를 테스트 클래스에 추가합니다.
속성 추가 dependsOnMethods = {"initEnvironmentTest"} @Test 주석에 testSalutationMessage() 방법.
Java 클래스 파일 이름 만들기 DependencyTestUsingAnnotation.java 에 C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class DependencyTestUsingAnnotation {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(dependsOnMethods = { "initEnvironmentTest" })
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test
public void initEnvironmentTest() {
System.out.println("This is initEnvironmentTest");
}
}
testng.xml 만들기
testng.xml 만들기 C:\>TestNG_WORKSPACE 테스트 케이스를 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "DependencyTestUsingAnnotation" />
</classes>
</test>
</suite>
javac를 사용하여 MessageUtil, 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java
이제 testng.xml을 실행하면 initEnvironmentTest () 메서드를 실행 한 후에 만 testSalutationMessage () 메서드가 실행됩니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오.
This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
DependOnGroups를 사용하는 예
전체 그룹에 의존하는 방법을 가질 수도 있습니다. 이것을 보여주는 예를 들어 보자.
수업 만들기
테스트 할 Java 클래스를 만듭니다. MessageUtil.java 에 C:\>TestNG_WORKSPACE.
public class MessageUtil {
private String message;
// Constructor
// @param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
테스트 케이스 클래스 생성
Java 테스트 클래스 (예 : DependencyTestUsingAnnotation.java)를 만듭니다.
테스트 메서드, testPrintMessage () testSalutationMessage () 및 initEnvironmentTest ()를 테스트 클래스에 추가하고 "init"그룹에 추가합니다.
속성 추가 dependsOnMethods = {"init.*"} @Test 주석에 testSalutationMessage() 방법.
다음과 같은 Java 클래스 파일을 만듭니다. DependencyTestUsingAnnotation.java 에 C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.Test;
public class DependencyTestUsingAnnotation {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test(groups = { "init" })
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Manisha";
Assert.assertEquals(message, messageUtil.printMessage());
}
@Test(dependsOnGroups = { "init.*" })
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message, messageUtil.salutationMessage());
}
@Test(groups = { "init" })
public void initEnvironmentTest() {
System.out.println("This is initEnvironmentTest");
}
}
이 예제에서 testSalutationMessage ()는 정규식 "init. *"와 일치하는 그룹에 따라 선언됩니다. 이는 testPrintMessage () 및 initEnvironmentTest () 메소드가 항상 testSalutationMessage () 전에 호출됨을 보장합니다.
종속 된 메서드가 실패하고 이에 대한 엄격한 종속성이있는 경우 (alwaysRun = false, 기본값) 종속 된 메서드는 FAIL로 표시되지 않고 SKIP으로 표시됩니다. 건너 뛴 메소드는 최종 보고서에 그대로보고됩니다 (HTML에서 빨간색도 녹색도 아닌 색상). 건너 뛴 메소드가 반드시 실패는 아니기 때문에 중요합니다.
testng.xml 만들기
testng.xml 만들기 C:\>TestNG_WORKSPACE 테스트 케이스를 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "DependencyTestUsingAnnotation" />
</classes>
</test>
</suite>
javac를 사용하여 MessageUtil, 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac MessageUtil.java DependencyTestUsingAnnotation.java
이제, 실행될의 testng.xml을 실행 testSalutationMessage () 만 실행 한 후 방법을 initEnvironmentTest () 방법.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오.
This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha
===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================
DependOnGroups 대 DependOnMethods
그룹을 사용할 때 더 이상 리팩토링 문제에 노출되지 않습니다. DependOnGroups 또는 groups 속성을 수정하지 않는 한 테스트는 적절한 종속성이 설정된 상태로 계속 실행됩니다.
종속성 그래프에 새 메서드를 추가해야 할 때마다 올바른 그룹에 넣고 올바른 그룹에 종속되는지 확인하기 만하면됩니다. 다른 방법을 수정할 필요가 없습니다.
TestNG에서 사용할 수있는 또 다른 흥미로운 기능은 parametric testing. 대부분의 경우 비즈니스 로직에 매우 다양한 수의 테스트가 필요한 시나리오를 접하게됩니다.Parameterized tests 개발자가 다른 값을 사용하여 동일한 테스트를 반복해서 실행할 수 있습니다.
TestNG를 사용하면 두 가지 방법으로 매개 변수를 테스트 방법에 직접 전달할 수 있습니다.
- testng.xml 사용
- 데이터 공급자와 함께
testng.xml로 매개 변수 전달
이 기술을 사용하면 testng.xml 파일 에서 단순 매개 변수를 정의한 다음 소스 파일에서 해당 매개 변수를 참조합니다. 이 기술을 사용하여 매개 변수를 전달하는 방법을 보여주는 예제를 살펴 보겠습니다.
테스트 케이스 클래스 생성
Java 테스트 클래스 (예 : ParameterizedTest1.java)를 만듭니다.
테스트 클래스에 테스트 메서드 parameterTest ()를 추가합니다. 이 메소드는 문자열을 입력 매개 변수로 사용합니다.
이 메서드에 주석 @Parameters ( "myName") 을 추가합니다 . 매개 변수는 testng.xml의 값으로 전달되며 다음 단계에서 확인할 수 있습니다.
다음과 같은 Java 클래스 파일을 만듭니다. ParameterizedTest1.java 에 C:\>TestNG_WORKSPACE.
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParameterizedTest1 {
@Test
@Parameters("myName")
public void parameterTest(String myName) {
System.out.println("Parameterized value is : " + myName);
}
}
testng.xml 만들기
testng.xml 만들기 C:\>TestNG_WORKSPACE 테스트 케이스를 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<parameter name = "myName" value="manisha"/>
<classes>
<class name = "ParameterizedTest1" />
</classes>
</test>
</suite>
<suite> 수준에서 매개 변수를 정의 할 수도 있습니다. <suite> 및 <test> 수준에서 myName 을 정의했다고 가정 합니다. 이러한 경우 일반 범위 지정 규칙이 적용됩니다. 즉, <test> 태그 내의 모든 클래스는 <test>에 정의 된 매개 변수 값을 볼 수 있고 나머지 testng.xml 파일의 클래스는 <suite>에 정의 된 값을 볼 수 있습니다.
javac를 사용하여 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac ParameterizedTest1.java
이제 parameterTest 메서드 를 실행할 testng.xml을 실행합니다 . TestNG는 먼저 <test> 태그에서 myName 이라는 매개 변수를 찾으려고 시도한 다음 찾을 수없는 경우이를 포함하는 <suit> 태그에서 검색합니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오.
Parameterized value is : manisha
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG는 testng.xml에 지정된 값을 매개 변수 유형으로 자동 변환하려고 시도합니다. 지원되는 유형은 다음과 같습니다.
- String
- int/Integer
- boolean/Boolean
- byte/Byte
- char/Character
- double/Double
- float/Float
- long/Long
- short/Short
데이터 제공자로 매개 변수 전달
Java에서 생성해야하는 복잡한 매개 변수 또는 매개 변수 (복잡한 개체, 속성 파일 또는 데이터베이스에서 읽은 개체 등)를 전달해야하는 경우 매개 변수는 Dataproviders를 사용하여 전달할 수 있습니다.
데이터 공급자는 다음과 같이 주석이 달린 방법입니다. @DataProvider. 이 주석에는 하나의 문자열 속성 (이름) 만 있습니다. 이름이 제공되지 않으면 데이터 공급자의 이름이 자동으로 메서드 이름으로 기본 설정됩니다. 데이터 공급자는 개체 배열을 반환합니다.
다음 예제는 데이터 공급자를 사용하는 방법을 보여줍니다. 첫 번째 예제는 Vector, String 또는 Integer를 매개 변수로 사용하는 @DataProvider에 대한 것이고 두 번째 예제는 object를 매개 변수로 사용하는 @DataProvider에 대한 것입니다.
예 1
여기서 @DataProvider는 Integer 및 Boolean을 매개 변수로 전달합니다.
Create Java class
PrimeNumberChecker.java라는 Java 클래스를 만듭니다. 이 클래스는 숫자가 소수인지 확인합니다. 이 클래스 만들기C:\>TestNG_WORKSPACE.
public class PrimeNumberChecker {
public Boolean validate(final Integer primeNumber) {
for (int i = 2; i < (primeNumber / 2); i++) {
if (primeNumber % i == 0) {
return false;
}
}
return true;
}
}
Create Test Case Class
Java 테스트 클래스 (예 : ParamTestWithDataProvider1.java)를 만듭니다.
주석을 사용하여 데이터 공급자로 정의 된 primeNumbers () 메서드를 정의합니다. 이 메서드는 개체 배열을 반환합니다.
테스트 메서드 testPrimeNumberChecker ()를 테스트 클래스에 추가합니다. 이 메서드는 Integer 및 Boolean을 입력 매개 변수로 사용합니다. 이 메서드는 전달 된 매개 변수가 소수인지 확인합니다.
이 메서드에 주석 @Test (dataProvider = "test1") 를 추가합니다 . dataProvider 속성은 "test1"에 매핑됩니다.
다음과 같은 Java 클래스 파일을 만듭니다. ParamTestWithDataProvider1.java 에 C:\>TestNG_WORKSPACE.
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ParamTestWithDataProvider1 {
private PrimeNumberChecker primeNumberChecker;
@BeforeMethod
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}
@DataProvider(name = "test1")
public static Object[][] primeNumbers() {
return new Object[][] {{2, true}, {6, false}, {19, true}, {22, false}, {23, true}};
}
// This test will run 4 times since we have 5 parameters defined
@Test(dataProvider = "test1")
public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult) {
System.out.println(inputNumber + " " + expectedResult);
Assert.assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));
}
}
Create testng.xml
testng.xml 만들기 C:\>TestNG_WORKSPACE 테스트 케이스를 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "ParamTestWithDataProvider1" />
</classes>
</test>
</suite>
javac를 사용하여 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
이제 testng.xml을 실행합니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오.
2 true
6 false
19 true
22 false
23 true
===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
===============================================
예 2
여기서 @DataProvider는 Object를 매개 변수로 전달합니다.
Create Java class
get / set 메소드가있는 간단한 객체 인 Java 클래스 Bean.java를 생성합니다. C:\>TestNG_WORKSPACE.
public class Bean {
private String val;
private int i;
public Bean(String val, int i) {
this.val = val;
this.i = i;
}
public String getVal() {
return val;
}
public void setVal(String val) {
this.val = val;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
Create Test Case Class
ParamTestWithDataProvider2.java와 같은 Java 테스트 클래스를 만듭니다.
주석을 사용하여 데이터 공급자로 정의 된 primeNumbers () 메서드를 정의합니다. 이 메서드는 개체의 배열을 반환합니다.
테스트 클래스에 테스트 메서드 testMethod ()를 추가합니다. 이 메소드는 매개 변수로 오브젝트 Bean을 사용합니다.
이 메서드에 주석 @Test (dataProvider = "test1") 를 추가합니다 . dataProvider 속성은 "test1"에 매핑됩니다.
ParamTestWithDataProvider2.java라는 Java 클래스 파일을 만듭니다. C:\>TestNG_WORKSPACE.
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ParamTestWithDataProvider2 {
@DataProvider(name = "test1")
public static Object[][] primeNumbers() {
return new Object[][] { { new Bean("hi I am the bean", 111) } };
}
@Test(dataProvider = "test1")
public void testMethod(Bean myBean) {
System.out.println(myBean.getVal() + " " + myBean.getI());
}
}
Create testng.xml
testng.xml 만들기 C:\>TestNG_WORKSPACE 테스트 케이스를 실행합니다.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
<test name = "test1">
<classes>
<class name = "ParamTestWithDataProvider2" />
</classes>
</test>
</suite>
javac를 사용하여 테스트 케이스 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
이제 testng.xml을 실행합니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
출력을 확인하십시오.
hi I am the bean 111
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================
TestNG와 다양한 테스트를 이해 했으므로 이제 기존 JUnit 코드를 리팩토링하는 방법에 대해 걱정해야합니다. TestNG는 자신의 속도에 맞춰 JUnit에서 TestNG로 전환하는 방법을 제공하므로 걱정할 필요가 없습니다. TestNG를 사용하여 기존 JUnit 테스트 케이스를 실행할 수 있습니다.
TestNG는 JUnit 테스트를 자동으로 인식하고 실행할 수 있으므로 TestNG를 모든 기존 테스트의 실행기로 사용하고 TestNG를 사용하여 새 테스트를 작성할 수 있습니다. TestNG 클래스 경로에 JUnit 라이브러리를 배치하기 만하면 JUnit 클래스를 찾아 사용하고 Ant에서 테스트 실행기를 JUnit에서 TestNG로 변경 한 다음 "혼합"모드에서 TestNG를 실행할 수 있습니다. 이렇게하면 동일한 패키지에서도 동일한 프로젝트에서 모든 테스트를 수행하고 TestNG 사용을 시작할 수 있습니다. 이 접근 방식을 사용하면 기존 JUnit 테스트를 점진적으로 TestNG로 변환 할 수도 있습니다.
TestNG의이 놀라운 능력을 보여주는 예를 들어 보겠습니다.
JUnit 테스트 케이스 클래스 생성
JUnit 테스트 클래스 인 Java 클래스 인 TestJunit.java를 작성하십시오. C:\>TestNG_WORKSPACE.
import org.junit.Test;
import static org.testng.AssertJUnit.assertEquals;
public class TestJunit {
@Test
public void testAdd() {
String str = "Junit testing using TestNG";
AssertEquals("Junit testing using TestNG",str);
}
}
이제 testng.xml을 C:\>TestNG_WORKSPACE, 다음과 같이 <suite> 태그를 포함합니다-
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Converted JUnit suite" >
<test name = "JUnitTests" junit="true">
<classes>
<class name = "TestJunit" />
</classes>
</test>
</suite>
JUnit 테스트 케이스를 실행하려면 위의 xml에서와 같이 junit = "true" 특성을 정의하십시오 . JUnit 테스트 케이스 클래스 TestJunit은 클래스 이름에 정의되어 있습니다.
JUnit 4의 경우 TestNG는 org.junit.runner.JUnitCore 실행기를 사용 하여 테스트를 실행합니다.
javac를 사용하여 모든 Java 클래스를 컴파일하십시오.
C:\TestNG_WORKSPACE>javac TestJunit.java
이제 testng.xml을 실행하면 JUnit 테스트 케이스가 TestNG로 실행됩니다.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE:C:\TestNG_WORKSPACE\lib\junit-4.11.jar" org.testng.TestNG testng.xml
여기서는 C : \ TestNG_WORKSPACE \ lib \ junit-4.11.jar 아래에 junit-4.11.jar를 배치했습니다.
출력을 확인하십시오.
===============================================
Converted JUnit suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
보고는 사용자가 테스트 실행 결과, 실패 지점 및 실패 이유를 이해하는 데 도움이되므로 테스트 실행에서 가장 중요한 부분입니다. 반면에 로깅은 실행 흐름을 주시하거나 오류 발생시 디버깅을 위해 중요합니다.
TestNG는 기본적으로 테스트 실행을 위해 다른 유형의 보고서를 생성합니다. 여기에는 HTML 및 XML 보고서 출력이 포함됩니다. TestNG를 사용하면 사용자가 자신의 리포터를 작성하고 TestNG와 함께 사용할 수 있습니다. 자체 로거를 작성하는 옵션도 있으며 이는 런타임시 TestNG에 의해 통지됩니다.
TestNG로 보고서를 생성하는 두 가지 방법이 있습니다-
Listeners− 리스너 클래스를 구현하려면 클래스가 org.testng.ITestListener 인터페이스 를 구현해야합니다 . 이러한 클래스는 테스트가 시작, 완료, 실패, 건너 뛰기 또는 통과 할 때 TestNG에서 런타임에 알림을받습니다.
Reporters−보고 클래스를 구현하려면 클래스가 org.testng.IReporter 인터페이스 를 구현해야합니다 . 이러한 클래스는 전체 제품군 실행이 종료 될 때 호출됩니다. 전체 테스트 실행의 정보를 포함하는 객체는 호출 될 때이 클래스로 전달됩니다.
이 장에서는보고 및 로깅의 네 가지 사례를 설명하기 위해 네 가지 다른 예가 있습니다.
Sr. 아니. | 사례 및 예 |
---|---|
1 | 커스텀 로깅 이 예제는 자신의 로거를 작성하는 방법을 보여줍니다. |
2 | 맞춤 리포터 이 예는 자신의 리포터를 작성하는 방법을 보여줍니다. |
삼 | HTML 및 XML 보고서 이 예는 TestNG에서 생성 된 기본 HTML 및 XML 보고서를 보여줍니다. |
4 | JUnit 보고서 이 예제는 TestNG 보고서에서 JUnit 보고서를 생성하는 방법을 보여줍니다. |
이 장에서는 ANT를 사용하여 TestNG를 실행하는 방법을 보여줍니다. 아래에 주어진 단계를 따르십시오-
1 단계 : Apache Ant 다운로드
최신 버전의 Apache Ant 다운로드
OS | 아카이브 이름 |
---|---|
윈도우 | apache-ant-1.8.4-bin.zip |
리눅스 | apache-ant-1.8.4-bin.tar.gz |
맥 | apache-ant-1.8.4-bin.tar.gz |
2 단계 : Ant 환경 설정
설정 ANT_HOMEANT 라이브러리가 컴퓨터에 저장된 기본 디렉토리 위치를 가리키는 환경 변수. apache-ant-1.8.4 폴더에 Ant 라이브러리를 저장했다고 가정 해 보겠습니다.
OS | 산출 |
---|---|
윈도우 | 환경 변수 ANT_HOME을 C : \ Program Files \ Apache Software Foundation \ apache-ant-1.8.4로 설정합니다. |
리눅스 | ANT_HOME = / usr / local / apache-ant-1.8.4 내보내기 |
맥 | ANT_HOME = / Library / apache-ant-1.8.4 내보내기 |
다음과 같이 시스템 경로에 Ant 컴파일러 위치를 추가하십시오-
OS | 기술 |
---|---|
윈도우 | 시스템 변수 Path 끝에 % ANT_HOME \ bin 문자열을 추가합니다. |
리눅스 | 내보내기 PATH =$PATH:$ANT_HOME / bin / |
맥 | 필요하지 않습니다. |
3 단계 : TestNG 아카이브 다운로드
필요한 jar 파일 다운로드 http://www.testng.org.
OS | 아카이브 이름 |
---|---|
윈도우 | testng-6.8.jar |
리눅스 | testng-6.8.jar |
맥 | testng-6.8.jar |
4 단계 : 프로젝트 구조 생성
폴더 생성 TestNGWithAnt 에 C:\>TestNG_WORKSPACE.
폴더 생성 src 에 C:\>TestNG_WORKSPACE>TestNGWithAnt.
폴더 생성 test 에 C:\>TestNG_WORKSPACE>TestNGWithAnt.
폴더 생성 lib 에 C:\>TestNG_WORKSPACE>TestNGWithAnt.
창조하다 MessageUtil 수업 C:\>TestNG_WORKSPACE>TestNGWithAnt>src 폴더.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public void printMessage() {
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage() {
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
TestMessageUtil 클래스 만들기 C:\>TestNG_WORKSPACE>TestNGWithAnt>src 폴더.
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestMessageUtil {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
Assert.assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Manisha";
Assert.assertEquals(message,messageUtil.salutationMessage());
}
}
testng-6.8.jar 복사 C:\>TestNG_WORKSPACE>TestNGWithAnt>lib 폴더.
ANT build.xml 생성
먼저 TestNG Ant 작업을 다음과 같이 정의해야합니다.
<taskdef name = "testng" classname = "org.testng.TestNGAntTask">
<classpath>
<pathelement location = "lib/testng-6.8.jar"/>
</classpath>
</taskdef>
그런 다음 우리는 <testng> TestNG 테스트 케이스를 실행하기위한 Ant의 태스크.
그만큼 build.xml 파일은 다음과 같습니다-
<project name = "TestNGTest" default = "test" basedir = ".">
<!-- Define <testng> task -->
<taskdef name = "testng" classname = "org.testng.TestNGAntTask">
<classpath>
<pathelement location = "lib/testng-6.8.jar"/>
</classpath>
</taskdef>
<property name = "testdir" location = "test" />
<property name = "srcdir" location = "src" />
<property name = "libdir" location = "lib" />
<property name = "full-compile" value="true" />
<path id = "classpath.base"/>
<path id = "classpath.test">
<fileset dir = "${libdir}"> <include name = "**/*.jar" /> </fileset> <pathelement location = "${testdir}" />
<pathelement location = "${srcdir}" /> <path refid = "classpath.base" /> </path> <target name = "clean" > <delete verbose="${full-compile}">
<fileset dir = "${testdir}" includes="**/*.class" /> </delete> </target> <target name = "compile" depends="clean"> <javac srcdir = "${srcdir}" destdir = "${testdir}" verbose="${full-compile}">
<classpath refid = "classpath.test"/>
</javac>
</target>
<target name = "test" depends="compile">
<testng outputdir = "${testdir}" classpathref="classpath.test"> <xmlfileset dir = "${srcdir}" includes="testng.xml"/>
</testng>
</target>
</project>
다음 Ant 명령을 실행하십시오.
C:\TestNG_WORKSPACE\TestNGWithAnt>ant
출력을 확인하십시오.
test:
[testng] [TestNG] Running:
[testng] C:\TestNG_WORKSPACE\TestNGWithAnt\src\testng.xml
[testng]
[testng] Inside testPrintMessage()
[testng] Manisha
[testng] Inside testSalutationMessage()
[testng] Hi!Manisha
[testng]
[testng] ===============================================
[testng] Plug ANT test Suite
[testng] Total tests run: 2, Failures: 0, Skips: 0
[testng] ===============================================
[testng]
BUILD SUCCESSFUL
Total time: 1 second
Eclipse로 TestNG를 설정하려면 아래 단계를 따르십시오.
1 단계 : TestNG 아카이브 다운로드
다음에서 최신 버전의 TestNG jar 파일을 다운로드합니다. http://www.testng.org
OS | 아카이브 이름 |
---|---|
윈도우 | testng-6.8.jar |
리눅스 | testng-6.8.jar |
맥 | testng-6.8.jar |
위의 JAR 파일을 C : \> TestNG 폴더에 복사했다고 가정합니다.
2 단계 : Eclipse 환경 설정
Eclipse 열기 → 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성 → 빌드 경로 → 빌드 경로 구성으로 이동하고 외부 Jar 추가 버튼을 사용하여 라이브러리에 testng-6.8.jar을 추가하십시오 .
Eclipse에 TestNG 플러그인이 내장되어 있다고 가정합니다. 사용할 수없는 경우 업데이트 사이트를 사용하여 최신 버전을 다운로드하십시오.
Eclipse IDE에서 Help / Software updates / Find and Install을 선택 합니다 .
설치할 새 기능을 검색하십시오.
새로운 원격 사이트.
Eclipse 3.4 이상의 경우 다음을 입력하십시오. http://beust.com/eclipse.
Eclipse 3.3 이하의 경우 다음을 입력하십시오. http://beust.com/eclipse1.
URL 옆의 확인란이 선택되어 있는지 확인하고 다음을 클릭 합니다.
그러면 Eclipse가 프로세스를 안내합니다.
이제 Eclipse는 TestNG 테스트 케이스를 개발할 준비가되었습니다.
3 단계 : Eclipse에서 TestNG 설치 확인
Eclipse에서 어느 위치에서나 TestNGProject 프로젝트를 만듭니다.
프로젝트에서 테스트 할 MessageUtil 클래스를 만듭니다.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message) {
this.message = message;
}
// prints the message
public String printMessage() {
System.out.println(message);
return message;
}
}
프로젝트에서 테스트 클래스 TestNGExample을 만듭니다.
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestNGExample {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
Assert.assertEquals(message,messageUtil.printMessage());
}
}
프로젝트 구조는 다음과 같아야합니다-
마지막으로 프로그램을 마우스 오른쪽 버튼으로 클릭하고 TestNG로 실행하여 프로그램의 출력을 확인합니다.
결과를 확인하십시오.