[java] JUnitParams를 활용한 테스트 코드 리팩토링 방법은 어떻게 되나요?

JUnitParams는 JUnit 프레임워크를 확장하여 매개변수화된 테스트 케이스를 작성할 수 있게 도와주는 라이브러리입니다. 이를 활용하면 여러 입력값을 가지는 테스트 케이스를 간편하게 작성할 수 있고, 테스트 코드의 가독성과 재사용성을 높일 수 있습니다.

다음은 JUnitParams를 활용하여 테스트 코드를 리팩토링하는 방법입니다.

1. JUnitParams 라이브러리 추가

먼저, 프로젝트의 의존성에 JUnitParams 라이브러리를 추가해야 합니다. Gradle 또는 Maven과 같은 빌드 도구를 사용 중이라면 해당 빌드 파일에서 JUnitParams 의존성을 추가하면 됩니다.

Gradle의 경우:

testCompile 'pl.pragmatists:JUnitParams:1.1.1'

Maven의 경우:

<dependency>
    <groupId>pl.pragmatists</groupId>
    <artifactId>JUnitParams</artifactId>
    <version>1.1.1</version>
</dependency>

2. @RunWith 및 @Parameters 설정

JUnitParams를 사용하기 위해, 테스트 클래스에 @RunWith(JUnitParamsRunner.class) 어노테이션을 추가해야 합니다. 또한, 매개변수화된 테스트 메서드에는 @Parameters 어노테이션을 추가하여 테스트 케이스의 입력값을 정의합니다.

예를 들어, 다음과 같은 테스트 메서드가 있다고 가정해봅시다:

@Test
public void addNumbersTest() {
    // Test code
}

이를 JUnitParams를 사용하여 리팩토링하면 다음과 같이 변경할 수 있습니다:

@RunWith(JUnitParamsRunner.class)
public class MyTest {

    @Test
    @Parameters({
        "2, 3, 5",
        "-1, 2, 1",
        "0, 0, 0"
    })
    public void addNumbersTest(int a, int b, int expected) {
        // Test code
    }
}

위의 예시에서 @Parameters 어노테이션은 입력값을 정의하고 있습니다. 각각의 입력값은 문자열로 표현되며, 각각의 입력값은 콤마로 구분됩니다. 이렇게 정의된 입력값들은 테스트 메서드에 인자로 전달됩니다.

3. 테스트 메서드 구현

@Parameters 어노테이션으로 정의된 입력값들은 테스트 메서드의 매개변수로 전달됩니다. 따라서, 테스트 메서드 내부에서는 매개변수를 활용하여 실제 로직을 구현하고 예상 결과 값과 비교합니다.

@Test
@Parameters({
    "2, 3, 5",
    "-1, 2, 1",
    "0, 0, 0"
})
public void addNumbersTest(int a, int b, int expected) {
    int result = Calculator.add(a, b);
    assertEquals(expected, result);
}

위의 예시에서 Calculator는 덧셈 로직을 구현한 클래스입니다. 입력값인 ab를 더한 결과가 expected 값과 일치하는지를 검증하는 코드입니다.

이렇게 JUnitParams를 사용하여 테스트 코드를 리팩토링하면 여러 입력값을 간편하게 처리할 수 있으며, 테스트 코드의 가독성과 재사용성을 향상시킬 수 있습니다.

참고 자료: