2008. 10. 1. 10:04

JUnit 기본 사용법




JUnit은 자바 세계에서 가장 널리 사용되어지고 있는 단위 테스팅 도구이다. Eclipse를 비롯한 대부분은 IDE는 JUnit을 기본으로 지원하고 있다. 단위테스트에 국한되어 있어 모든 테스트를 소화하기엔 부족한 점이 있지만, 기능의 확장을 위해 이를 기반으로 한 Add-ons 이나 Extensions 들이 많이 나와있다. 현재까지 가장 많이 쓰여 왔던 JUnit 3.8 버전의 사용법을 간단히 정리해본다.

1. 기본 테스트 예제

import junit.framework.TestCase;

public class SimpleTest extends TestCase {
	private int x = 3;
	private int y = 2;
	
	public void testAddition() {
		int z = x + y;
		assertEquals(5, z);
	}
}
- junit.framework.TestCase 를 상속한 테스트용 클래스 생성.
- public void 타입으로 선언된 test* 로 시작되는 테스트 메소드 작성.
- assert 로 테스트 결과 검증.

2. setUp과 tearDown을 이용한 각 테스트 메소드 실행시마다 초기화 및 종료화 처리 예제

import junit.framework.TestCase;

public class SetupTest extends TestCase {
	private int x;
	private int y;
	
	protected void setUp() {
		x = 3;
		y = 2;
		System.out.println("setUp()");
	}
	
	public void testAddition() {
		int z = x + y;
		assertEquals(5, z);
	}
	
	public void testSubtraction() {
		int z = x - y;
		assertEquals(1, z);
	}
	
	protected void tearDown() {
		System.out.println("tearDown()");
	}
}
- 각 테스트 마다 매번 setUp() 과 tearDown() 실행.

3. TestSetup를 이용한 클래스내 모든 테스트 실행 전 초기화와 실행 후 종료화 처리 예제

import junit.extensions.TestSetup;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestSetupTest extends TestCase {
	private static int x;
	private static int y;

	public static Test suite() {
		TestSetup setup = new TestSetup(
				new TestSuite(TestSetupTest.class)) {
			protected void setUp() {
				x = 3;
				y = 2;
				System.out.println("setUp()");
			}
			
			protected void tearDown() {
				System.out.println("tearDown()");
			}
		};
		return setup;
	}

	public void testAddition() {
		int z = x + y;
		assertEquals(5, z);
	}

	public void testSubtraction() {
		int z = x - y;
		assertEquals(1, z);
	}
}
- 모든 테스트 실행 전과 실행 후 단 1회만 setUp()과 tearDown() 실행.

4. 예외 테스트 예제

import junit.framework.TestCase;

public class ExceptionTest extends TestCase {	
	public void testDivisionByZero() {
		try {
			int n = 2 / 0;
			fail("Divided by Zero!"); // 실패
		}
		catch (ArithmeticException ae) {
			assertNotNull(ae.getMessage()); // 성공
		}
	}
}

5. TestSuite를 이용한 모든 테스트 실행 예제

import junit.framework.Test;
import junit.framework.TestSuite;

public class AllTests {
	public static Test suite() {
		TestSuite suite = new TestSuite("All JUnit Tests");
		suite.addTestSuite(ExceptionTest.class);
		suite.addTestSuite(SetupTest.class);
		suite.addTestSuite(SimpleTest.class);
		suite.addTest(TestSetupTest.suite());
		return suite;
	}

	public static void main(String[] args) {
		junit.textui.TestRunner.run(suite());
	}
}