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의 다양한 기능에 대해 학습하고, 적절히 활용하여 효과적인 테스트 코드를 작성해보세요.