Junit 4 테스트 클래스 작성
JUnit4에서는 POJO 형태로 단위 테스트 클래스가 정의 됩니다. 단위 테스트 대상 메소드는 @Test를 통해서 정의 됩니다. 또한 단위 테스트 앞뒤에 초기화와 정리를 수행하는 메소드를 지정할 수 있습니다. 추가적으로 클래스 실행 앞뒤에 초기화와 정리를 수행하는 메서드를 정의 할 수 있습니다.@Test 어노테이션은 timeout과 expected 속성을 갖습니다. timeout은 실행 시간은 지정된 단위 시간(밀리세컨드)를 초과하면 않된다는 것이며 expected는 지정한 클래스의 exception이 단위 테스트 메서드에서 발생할 것을 의미합니다.
- @Test 어노테이션으로 단위 테스트 클래스정의
- @After, @Before 어네테이션을 사용하여 각 단위 테스트 메서드의 실행 앞뒤에서 초기화와 자원 정리 작업을 수행
- @AfterClass, @BeoreClass 어노테이션을 사용하여 각 단위 테스트 클래스 수행 전후에 초기화와 자원 정리 작업을 수행
package devtainer.demo.unitTest.junit4; import junit.framework.Assert; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JunitTest { static final Logger logger = LoggerFactory.getLogger(JunitTest.class); @Before public void setup(){ logger.info("@Before 메서드 실행"); } @After public void tearDown(){ logger.info("@After 메서드 실행"); } @BeforeClass public static void setupForClass(){ logger.info("@BeforeClass 메서드 실행"); } @AfterClass public static void tearDownForClass(){ logger.info("@AfterClass 메서드 실행"); } @Test(expected=RuntimeException.class) //예외 발생을 예상 public void test1(){ logger.info("@Test 단위 테스트 메서드 메서드 실행"); throw new RuntimeException(); } @Test(timeout=100) //100 millisecond 초과시 에러 public void test2(){ logger.info("@Test 단위 테스트 메서드 메서드 실행"); int a = 5; int b = 5; Assert.assertEquals("add 메서드 테스트", a+b, Calculator.add(a, b)); Assert.assertEquals("minus 메서드 테스트", a-b, Calculator.minus(a, b)); Assert.assertEquals("multiply 메서드 테스트", a*b, Calculator.multiply(a, b)); Assert.assertEquals("divide 메서드 테스트", (double)a/b, Calculator.divide(a, b)); // fail(String) // assertTrue(true); // assertsEquals([String message], expected, actual) // assertsEquals([String message], expected, actual, tolerance) // assertNull([message], object) // assertNotNull([message], object) // assertSame([String], expected, actual) // assertNotSame([String], expected, actual) // assertTrue([message], boolean condition) } }
단위테스트 클래스 수행 결과
앞의 단위 테스트 수행 결과는 다음과 같습니다.INFO - JunitTest : setupForClass @BeforeClass 메서드 실행 INFO - JunitTest : setup @Before 메서드 실행 INFO - JunitTest : test1 @Test 단위 테스트 메서드 메서드 실행 INFO - JunitTest : tearDown @After 메서드 실행 INFO - JunitTest : setup @Before 메서드 실행 INFO - JunitTest : test2 @Test 단위 테스트 메서드 메서드 실행 INFO - JunitTest : tearDown @After 메서드 실행 INFO - JunitTest : tearDownForClass @AfterClass 메서드 실행
Suite 설정
앞에 예제와 같이 단위 테스트 클래스를 독자적으로 정리하고 실행할 수 있습니다. 그러나 때로는 몇개의 단위 테스트를 하나의 단위로 묶어서 수행해야 하는 경우가 있습니다. 이러한 경우에 Suite의 개념을 사용할 수 있습니다. JUnit4에서 Suite을 위한 어노테이션은 다음과 같습니다.package devtainer.demo.unitTest.junit4; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses( { JunitTest.class, Junit2Test.class }) public class SuiteTest { }
- @RunWith로 Suite.class 지정
- @Suite.SuiteClass 지정
이클립스 단위테스트 등록 이미지
일반 단위 테스트 클래스와 Suite 클래스는 이클립스 상에서 다음과 같이 표현된다. Suite 클래스는 다른 단위 클래스를 포함하는 것을 확인 할 수 있다.
Suite 클래스 실행 결과
INFO - JunitTest : setupForClass @BeforeClass 메서드 실행 INFO - JunitTest : setup @Before 메서드 실행 INFO - JunitTest : test1 @Test 단위 테스트 메서드 메서드 실행 INFO - JunitTest : tearDown @After 메서드 실행 INFO - JunitTest : setup @Before 메서드 실행 INFO - JunitTest : test2 @Test 단위 테스트 메서드 메서드 실행 INFO - JunitTest : tearDown @After 메서드 실행 INFO - JunitTest : tearDownForClass @AfterClass 메서드 실행 INFO - Junit2Test : setupForClass @BeforeClass 메서드 실행 INFO - Junit2Test : setup @Before 메서드 실행 INFO - Junit2Test : test1 @Test 단위 테스트 메서드 메서드 실행 INFO - Junit2Test : tearDown @After 메서드 실행 INFO - Junit2Test : setup @Before 메서드 실행 INFO - Junit2Test : test2 @Test 단위 테스트 메서드 메서드 실행 INFO - Junit2Test : tearDown @After 메서드 실행 INFO - Junit2Test : tearDownForClass @AfterClass 메서드 실행
예제
예제는 다음 URL에서 SVN으로 받으실 수 있습니다.- SVN URL: http://devtainer-demo.googlecode.com/svn/trunk/junit4
- 프로젝트는 Maven 형태로 구성
- maven 2.2.x 설치가 필수
- 실행방법
- 위치: 프로젝트 root
- command: mvn clean test
C:\test-cloud\workspace\archetype\junit4>mvn clean test [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building junit4 [INFO] task-segment: [clean, test] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory C:\test-cloud\workspace\archetype\junit4\target [INFO] [resources:resources {execution: default-resources}] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to C:\test-cloud\workspace\archetype\junit4\targe t\classes [INFO] [resources:testResources {execution: default-testResources}] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 3 source files to C:\test-cloud\workspace\archetype\junit4\targ et\test-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: C:\test-cloud\workspace\archetype\junit4\targe t\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running devtainer.demo.unitTest.junit4.JunitTest INFO - JunitTest : setupForClass @BeforeClass 메서드 실행 INFO - JunitTest : setup @Before 메서드 실행 INFO - JunitTest : test1 @Test 단위 테스트 메서드 메서드 실행 INFO - JunitTest : tearDown @After 메서드 실행 INFO - JunitTest : setup @Before 메서드 실행 INFO - JunitTest : test2 @Test 단위 테스트 메서드 메서드 실행 INFO - JunitTest : tearDown @After 메서드 실행 INFO - JunitTest : tearDownForClass @AfterClass 메서드 실행 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.172 sec Running devtainer.demo.unitTest.junit4.SuiteTest INFO - JunitTest : setupForClass @BeforeClass 메서드 실행 INFO - JunitTest : setup @Before 메서드 실행 INFO - JunitTest : test1 @Test 단위 테스트 메서드 메서드 실행 INFO - JunitTest : tearDown @After 메서드 실행 INFO - JunitTest : setup @Before 메서드 실행 INFO - JunitTest : test2 @Test 단위 테스트 메서드 메서드 실행 INFO - JunitTest : tearDown @After 메서드 실행 INFO - JunitTest : tearDownForClass @AfterClass 메서드 실행 INFO - Junit2Test : setupForClass @BeforeClass 메서드 실행 INFO - Junit2Test : setup @Before 메서드 실행 INFO - Junit2Test : test1 @Test 단위 테스트 메서드 메서드 실행 INFO - Junit2Test : tearDown @After 메서드 실행 INFO - Junit2Test : setup @Before 메서드 실행 INFO - Junit2Test : test2 @Test 단위 테스트 메서드 메서드 실행 INFO - Junit2Test : tearDown @After 메서드 실행 INFO - Junit2Test : tearDownForClass @AfterClass 메서드 실행 Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.062 sec Running devtainer.demo.unitTest.junit4.Junit2Test INFO - Junit2Test : setupForClass @BeforeClass 메서드 실행 INFO - Junit2Test : setup @Before 메서드 실행 INFO - Junit2Test : test1 @Test 단위 테스트 메서드 메서드 실행 INFO - Junit2Test : tearDown @After 메서드 실행 INFO - Junit2Test : setup @Before 메서드 실행 INFO - Junit2Test : test2 @Test 단위 테스트 메서드 메서드 실행 INFO - Junit2Test : tearDown @After 메서드 실행 INFO - Junit2Test : tearDownForClass @AfterClass 메서드 실행 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Results : Tests run: 8, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4 seconds [INFO] Finished at: Tue Nov 09 11:25:15 VET 2010 [INFO] Final Memory: 13M/32M [INFO] ------------------------------------------------------------------------ C:\test-cloud\workspace\archetype\junit4>
0 개의 댓글:
댓글 쓰기