Bigfat

[Spring] JUnit 사용하기 본문

Java/web

[Spring] JUnit 사용하기

kyou 2017. 4. 26. 15:30

자동화된 테스트 JUnit을 사용해 단위 테스트를 해보자

  JUnit은 단위 테스트 프레임워크로, 외부 테스트 프로그램(케이스)을 작성하여 번거로운 디버깅을 쉽게 도와주는 테스트용 프레임워크다(참고1).


  이클립스에는 플러그인 형태로 포함되어있고, 현재 진행 중인 Spring MVC Project는 Maven기반이므로 JUnit의 의존성이 추가되어있다. pom.xml을 열어 junit 의존성을 확인하자. 메이븐 리퍼지토리를 확인해보니 4.12버전까지 나와있어 버전을 변경해주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- Test -->
<!-- <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.7</version>
    <scope>test</scope>
</dependency> -->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
cs


  com.edu.bbs.common패키지 아래에 Util 클래스를 생성하여, 랜덤으로 범용 고유 식별자(UUID, universally unique identifier)를 얻어오는 getRandomString 메서드를 선언해뒀다. UUID는 16 옥텟(128비트)의 수이고, 표준 형식에서 UUID는 32개의 16진수로 표현되며 총 36개 문자(32개 문자와 4개의 하이폰)로 된 8-4-4-4-12라는 5개의 그룹을 하이폰으로 구분한다. 고유성을 완벽하게 보장할 수는 없지만 실제 사용상에서 중복될 가능성이 거의 없다고 인정되기 때문에 많이 사용된다(참고2).

  파일 업로드 기능 구현에 필요한 작업이기에 미리 아래와 같이 만들어보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.edu.bbs.common;
 
import java.util.UUID;
 
import org.springframework.stereotype.Component;
 
@Component
public class Util {
    
    public static String getRandomString() {
        return UUID.randomUUID().toString().replaceAll("-""");
    }
    
}
cs


  src/test/java 아래에 com.edu.bbs 패키지가 이미 존재할 것이다. 이 패키지에 JUnit Test Case 클래스를 생성해준다.


  Name은 Util 클래스의 테스트 케이스이므로 UtilTest라고 기입해줬다. Class under test에 직접 테스트할 Util 클래스의 경로를 적어주거나, Browse 버튼을 클릭해 검색하면 된다. Name과 Class under test칸에 기입을 완료하고, Next 버튼을 클릭한다.


  테스트할 메서드를 선택하고, Finish 버튼을 클릭한다.


  UtilTest 클래스는 아래와 같이 작성된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.edu.bbs.common;
 
import static org.junit.Assert.*;
 
import org.junit.Test;
 
public class UtilTest {
 
    @Test
    public void testGetRandomString() {
        fail("Not yet implemented");
    }
 
}
cs


  랜덤으로 UUID를 얻어와 콘솔에 출력해주고, JUnit이 제공하는 assertEquals 메서드로 UUID가 정확한 길이(32)로 넘어왔는지 확인한다. testGetRandomString 메서드를 보면 @Test 어노테이션이 선언된 것을 볼 수 있다. 이는 해당 메서드가 단위 테스트 메서드임을 지정한다는 의미다(참고1).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.edu.bbs.common;
 
import static org.junit.Assert.*;
 
import org.junit.Test;
 
public class UtilTest {
 
    @Test
    public void testGetRandomString() {
        String randomStr = Util.getRandomString();
        
        System.out.println(randomStr);
        assertEquals(32, randomStr.length());
    }
 
}
cs


  단위 테스트 클래스를 Run As > JUnit Test 로 실행한다.


  테스트 메서드가 아무런 문제 없이 성공되었고, 메서드 수행 시간 또한 확인할 수 있다.


  이제 더이상 main()을 만들어 단위 테스트를 진행하지 않고, JUnit을 활용해보자.



[JUnit.org 참고]

[학습 테스트(Learning Test)를 이용해서 공부하기 참고]

[새내기 개발자의 JUnit 여행기 참고1]

[범용 고유 식별자, 위키피디아 참고2]