JUnit 프레임워크 개요
JUnit는 자바 애플리케이션의 단위 테스트를 지원하는 오픈소스 프레임워크입니다. 가볍지만 강력한 기능을 제공하며, 테스트 자동화와 검증에 널리 사용됩니다. 핵심 구성 요소로는 Test, TestCase, TestSuite가 있습니다.
- TestCase: 특정 클래스나 메서드를 검증하는 개별 테스트 케이스를 정의합니다.
- TestSuite: 여러 테스트 케이스를 그룹화하여 일괄 실행할 수 있도록 묶습니다.
환경 설정
최신 버전의 JUnit은 공식 사이트 또는 Maven/Gradle과 같은 빌드 도구를 통해 다운로드할 수 있습니다. 전통적인 방식으로 사용할 경우, 배포된 JAR 파일을 프로젝트의 classpath에 포함시키면 됩니다. 이후 코드에서 JUnit API를 임포트하여 테스트를 작성할 수 있습니다.
기본 테스트 작성 예제
다음은 간단한 계산 기능을 가진 클래스와 그에 대한 단위 테스트 예시입니다.
public class Person {
public int increment(int value) {
return value + 1;
}
public int decrement(int value) {
return value - 1;
}
}
이 클래스를 검증하기 위한 테스트 케이스는 다음과 같이 작성할 수 있습니다.
import junit.framework.TestCase;
public class PersonTest extends TestCase {
private Person person;
protected void setUp() throws Exception {
// 각 테스트 메서드 실행 전 준비 작업
person = new Person();
}
public void testIncrement() {
int result = person.increment(5);
assertEquals(6, result);
}
public void testDecrement() {
int result = person.decrement(3);
assertEquals(2, result);
}
protected void tearDown() throws Exception {
// 각 테스트 메서드 실행 후 정리 작업
person = null;
}
}
주요 어설션 메서드
JUnit은 다양한 조건 검사를 위한 어설션 메서드를 제공합니다.
assertEquals(expected, actual): 두 값이 같은지 비교합니다.assertTrue(condition): 조건이 참인지 확인합니다.assertFalse(condition): 조건이 거짓인지 확인합니다.assertNull(object): 객체가 null인지 검사합니다.assertNotNull(object): 객체가 null이 아닌지 검사합니다.assertSame(expected, actual): 두 객체가 동일 인스턴스인지 확인합니다.
테스트 스위트를 통한 통합 실행
여러 테스트 케이스를 모아 한 번에 실행하려면 TestSuite를 사용합니다.
방법 1: 전체 클래스 등록
테스트 메서드 이름이 test로 시작할 경우, 해당 클래스 전체를 자동으로 스캔하여 실행합니다.
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite("Person 테스트 모음");
suite.addTestSuite(PersonTest.class);
return suite;
}
}
방법 2: 특정 메서드 직접 지정
특정 테스트 메서드만 선택적으로 실행하고자 할 때는, 테스트 클래스에 문자열 기반 생성자를 추가한 후 명시적으로 등록합니다.
public class PersonTest extends TestCase {
public PersonTest(String name) {
super(name);
}
// 나머지 테스트 메서드는 동일
}
그 후, 원하는 메서드만 포함하는 스위트를 구성합니다.
public class SelectiveTest {
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new PersonTest("testIncrement"));
return suite;
}
}
테스트 실행 방식
JUnit은 다양한 실행 환경을 제공합니다.
junit.textui.TestRunner: 콘솔 기반의 텍스트 출력 인터페이스junit.awtui.TestRunner: AWT 기반 GUIjunit.swingui.TestRunner: Swing 기반 GUI (더 현대적 UI)
이들 클래스는 TestRunner.run(suite) 형태로 테스트 스위트를 실행할 수 있습니다.
또한, IDE인 Eclipse, IntelliJ IDEA, MyEclipse 등은 JUnit을 내장하고 있어, 마우스 오른쪽 클릭만으로도 테스트 클래스 생성 및 실행이 가능하며, 실시간 결과 확인이 용이합니다.