[java] JUnit의 테스트 코드 재사용

JUnit은 자바에서 단위 테스트를 위한 프레임워크로 널리 사용되고 있습니다. 테스트 코드를 작성하고 실행하여 프로그램의 동작을 검증할 수 있습니다. 테스트 코드는 반복적으로 작성되어야 할 수도 있고, 여러 테스트 사례에서 재사용되어야 할 수도 있습니다. 이번 블로그 포스트에서는 JUnit의 테스트 코드를 재사용하는 방법에 대해 알아보겠습니다.

1. Parameterized 테스트

Parameterized 테스트는 JUnit에서 제공하는 기능으로, 동일한 테스트 메소드를 다양한 인자를 사용하여 반복적으로 실행할 수 있는 기능입니다. 다양한 입력 값을 테스트하는데 유용하며, 테스트 결과에 대한 다양한 케이스를 검증할 수 있습니다.

@RunWith(Parameterized.class)
public class CalculatorTest {

    private int number;
    private boolean expected;

    public CalculatorTest(int number, boolean expected) {
        this.number = number;
        this.expected = expected;
    }

    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][]{
                {0, true},
                {1, false},
                {2, true}
        });
    }

    @Test
    public void testIsEven() {
        Calculator calculator = new Calculator();
        boolean result = calculator.isEven(number);
        assertEquals(expected, result);
    }
}

위의 예제 코드에서 Calculator 클래스의 isEven() 메소드를 테스트하는 예제입니다. @RunWith(Parameterized.class) 어노테이션을 사용하여 Parameterized 테스트를 실행하도록 설정하고, @Parameters 메소드를 통해 테스트에 사용될 입력 값을 생성합니다. 이후 동일한 테스트 메소드인 testIsEven()를 다수의 입력 값으로 반복 실행하여 검증합니다.

2. 테스트 Fixtures

테스트 Fixtures는 JUnit에서 제공하는 어노테이션을 사용하여 테스트 환경을 설정할 수 있습니다. @Before 어노테이션을 사용하여 각 테스트 메소드 실행 전에 실행되는 메소드를 지정할 수 있습니다. 이를 통해 반복적인 초기화 작업을 수행할 수 있습니다.

public class CalculatorTest {

    private Calculator calculator;

    @Before
    public void setUp() {
        System.out.println("Setting up calculator");
        calculator = new Calculator();
    }

    @Test
    public void testAdd() {
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }

    @Test
    public void testSubtract() {
        int result = calculator.subtract(5, 3);
        assertEquals(2, result);
    }
}

위의 예제 코드에서 setUp() 메소드는 각 테스트 메소드 실행 전에 실행되는 초기화 메소드입니다. 이를 통해 calculator 객체를 생성하고 초기화할 수 있습니다.

3. 외부 테스트 데이터 사용

테스트 데이터를 외부 파일에서 가져와 사용하는 경우가 있습니다. 예를 들어 CSV 파일 등에서 입력 값을 읽어와 테스트에 사용할 수 있습니다. JUnit에서는 @CsvFileSource 어노테이션을 통해 CSV 파일을 이용한 테스트 데이터를 제공합니다.

public class CalculatorTest {

    @ParameterizedTest
    @CsvFileSource(resources = "/test-data.csv")
    public void testAdd(int a, int b, int expected) {
        Calculator calculator = new Calculator();
        int result = calculator.add(a, b);
        assertEquals(expected, result);
    }
}

위의 예제 코드에서 @CsvFileSource 어노테이션을 사용하여 test-data.csv 파일에서 테스트 데이터를 읽어옵니다. testAdd() 메소드에서 해당 데이터를 사용하여 테스트를 실행하고 검증합니다.

결론

JUnit을 이용하여 테스트 코드를 작성하고 실행할 때, 코드를 재사용할 수 있는 다양한 방법이 있습니다. Parameterized 테스트, 테스트 Fixtures, 외부 테스트 데이터 사용 등의 기능을 사용하여 테스트의 생산성과 유지보수성을 높일 수 있습니다. JUnit의 다양한 기능에 대해 학습하고, 적절히 활용하여 효과적인 테스트 코드를 작성해보세요.

참고 자료