[java] TestNG와 수퍼타입 테스트

TestNG는 Java 기반의 테스트 프레임워크로, 단위 테스트, 통합 테스트 및 테스트 스위트를 실행하고 관리하는 기능을 제공합니다. 이번 글에서는 TestNG를 사용하여 수퍼타입 테스트를 작성하는 방법에 대해 알아보겠습니다.

수퍼타입 테스트란?

수퍼타입 테스트는 다양한 클래스나 객체를 상속 또는 구현한 코드를 테스트하는 기법입니다. 이를 통해 다양한 구현체에 대한 일관된 테스트를 수행할 수 있으며, 테스트 코드의 유지보수 및 재사용성을 높일 수 있습니다.

TestNG 설정

먼저, 프로젝트에 TestNG를 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 종속성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.3.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

수퍼타입 테스트 작성

TestNG에서는 @Test 어노테이션을 사용하여 테스트 메서드를 작성할 수 있습니다. 수퍼타입 테스트를 작성하기 위해서는 @Factory 어노테이션과 @DataProvider 어노테이션을 함께 사용해야 합니다.

public abstract class SuperTypeTest {
    
    private SuperType superType;
    
    public SuperTypeTest(SuperType superType) {
        this.superType = superType;
    }
    
    @Test
    public void test1() {
        // 테스트 코드 작성
    }
    
    @Test
    public void test2() {
        // 테스트 코드 작성
    }
    
    @Factory(dataProvider = "superTypes")
    public static Object[] createTests(SuperType superType) {
        // 구현체를 생성하여 반환
    }
    
    @DataProvider(name = "superTypes")
    public static Object[][] getSuperTypes() {
        // 테스트에 사용할 구현체들을 반환
    }
}

위의 예제 코드에서 SuperTypeTest는 추상 클래스로, SuperType 객체를 생성자로 받습니다. test1()test2()는 테스트 메서드로, 테스트하고자 하는 동작을 작성합니다.

createTests()@Factory 어노테이션을 사용하여 구현체를 생성하는 메서드입니다. getSuperTypes()@DataProvider 어노테이션을 사용하여 테스트에 사용할 구현체들을 반환합니다.

테스트 실행

테스트를 실행하기 위해서는 TestNG XML 파일을 작성해야 합니다. 예를 들어, testng.xml 파일을 다음과 같이 작성합니다.

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="SuperType Tests">
    <test name="Sample Test">
        <classes>
            <class name="com.example.SuperTypeTest" />
        </classes>
    </test>
</suite>

위의 예제에서 SuperTypeTest를 테스트할 클래스 이름으로 변경합니다.

테스트를 실행하려면 TestNG를 실행시켜야 합니다. 다음의 명령어를 사용하여 테스트를 실행합니다.

java -cp "testng.jar:your_code.jar" org.testng.TestNG testng.xml

위에서 testng.jar는 TestNG의 JAR 파일 경로로 대체해야 합니다. your_code.jar는 테스트 대상 클래스가 포함된 JAR 파일 경로로 대체해야 합니다.

결론

TestNG를 사용하여 수퍼타입 테스트를 작성하는 방법에 대해 알아보았습니다. 수퍼타입 테스트를 통해 다중 구현체에 대한 일관된 테스트를 수행할 수 있고, 테스트 코드의 유지보수 및 재사용성을 향상시킬 수 있습니다. 효율적인 테스트를 위해 TestNG를 활용해 보세요.

참고 자료