JUnit을 이용한 테스팅 방법

이종철 0 4,977 2013.05.26 02:30
JUnit을 이용한 테스팅 방법
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

JUnitwww.junit.org에 가시면 다운 받을 수 있으니 다운 받으신 후 적당히 압축을 풀고 c:\junit3.8.1\junit.jar 처럼 파일이 위치하도록 합니다. 물론 c:\junit3.8.1\junit.jar를 환경변수 classpath에 추가 합니다.

 

JUnit을 사용하기 위해서는 일반적으로 앞의 강좌처럼 main 함수는 필요하지 않으며 대신 별도의 테스트 클래스를 작성하여 테스트를 진행 합니다.

 

JUnitTest.java의 이전 강좌에서 만든 main함수는 삭제를 하시면 되구요. 이전 강좌에서 작성했던 JUnitTest.java 클래스는 다음과 같습니다.

 

 

/**
 *
 */
package onjprogramming;

 

/**
 * @author master
 *
 */
public class JUnitTest {

 

             int i = 0;
             int j = 0;
             int sum = 0;
            
             /**
              * 합하기 위한 수를 setting
              * @param i
              * @param j
              */
             public void setValue(int i, int j) {
                           this.i = i;
                           this.j = j;
             }
            
             /**
              * 두수를 합한다.
              * @param i
              * @param j
              */
             public void setSum() {
                           sum = i + j;
             }
            
             /**
              * 두수의 합을 return
              * @return
              */
             public int getSum() {
                           return sum;
             }
}

 

이번에 테스트를 위한 클래스를 다음과 같이 작성 합니다.
(import를 위해 c:\junit3.8.1\junit.jar 파일을 클래스패스에 적용시켜야 합니다.)

 

/*
 * JUnitTest 클래스의 getSum() 메소드를 테스트
 */
package oraclejava;

 

import junit.framework.TestCase;

 

public class TestJUnitTest extends TestCase {

 

             /**
              * @param args
              */
             public void testgetSum() {
                           //테스트를 위한 클래스(두수의 합을 구하는 클래스)
                           JUnitTest j = new JUnitTest();
                          
        j.setValue(10, 20);  //합을 구하기 위한 두수 set
        j.setSum() ;         //합을 구함
       
        //우리는 결과를 알고 있으므로 30이라고 하자!! 30 아니면 검증시 오류!!
        assertTrue(j.getSum() == 30);
             }

 

}

 

 

 

이제 JUnit을 이용하여 테스트를 진행하는데 다음과 같이 클래스를 컴파일 하여 실행합니다.

 

C:\project\test\src>javac oraclejava\TestJUnitTest.java

 

C:\project\test\src>java junit.textui.TestRunner oraclejava
.TestJUnitTest
.
Time: 0

 

OK (1 test)

 

Time은 수행하는데 걸린 시간이며 OK의 의미는 정상적이라는 뜻 입니다.

 

 

실제 TEST를 위해 JUnitTest.java getSum() 메소드를 아래와 같이 조작 합니다.

 

public int getSum() {
                 return sum+1;
}

 

힙에다 1을 더했으니 잘못 만들어진 메소드 임에 틀림없습니다.
JUnitTest.java를 다시 컴파일 한 후 TestJUnitTest를 실행 합니다.

 

 

C:\project\test\src>javac oraclejava\JUnitTest.java

 

C:\project\test\src>java junit.textui.TestRunner oraclejava.TestJUnitTest
.F
Time: 0.01
There was 1 failure:
1) testgetSum(oraclejava.TestJUnitTest)junit.framework.AssertionFailedError
        at oraclejava.TestJUnitTest.testgetSum(TestJUnitTest.java:21)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

 

FAILURES!!!
Tests run: 1,  Failures: 1,  Errors: 0

 

 

JUnit은 테스트가 실패 했다고 보여주는데(당연하죠^^ 합에다  1을 더해서 리턴 했으니) 우리는 이러한 과정을 검증(assertion)이라고 합니다.

 

위 예제에서는 테스트 메소드를 하나만 만들어 보았는데 처음 JUnit을 접한 분이시라면 조금 복잡하게 느끼실 수도 있으리라 생각됩니다. JUnit의 장점은 테스트 검증을 별도의 클래스에서 작성하며 이 테스트 클래스를 실제 소스와 함께 보관할 수 있어 테스트가 체계적으로 관리될 수 있도록 합니다.

 

실제 프로젝트에서 사용한다면 테스트가 필요한 주요 클래스마다 TestXXX 클래스를 쌍으로 둘 것이며 주요 클래스의 메소드를 테스트 하기 위한 테스트 메소드를 TestXXX 클래스안에 두게 될 것 입니다. Ant <junit> 태스크까지 이용한다면 테스트 결과도 html로 받아 볼 수 있습니다.

Comments