자바 Junit 기능중 타임 아웃 테스트 하기 |
개발환경 : window 7 64bit, Eclipse Kepler, Android 4.2.2,Junit 4.0 |
프로젝트에서 서버 프로그램 중에 배치 개발을 많이 하고 한다. 간단한
로직이라면 별 문제가 되지 않겠지만 실시간 으로 데이터를 조회해서
처리해야 되는 로직중에 시간이 문제 되는 것들이 있다. 그래서 쿼리도
튜닝하고 로직에서 어떻게 시간을 줄일수 있을지 고민 하곤했다.
이전에는 보통 소스에서 stop watch 클래스를 만들어 시간을 재고
그 측정값을 로그로 표현해서 관리자가 보도록 했다. 이것은 전체적으로
프로그램이 어느 정도 완료된 후에 해 볼수 있는 테스트 이다.
하지만 Junit 은 어노테이션 파라미터 하나로 시간을 테스트 해
볼수 있다. 예를 들어 배치가 돌아야 하는데 특정시간을 넘어서는 안된다.
그 시간을 셋팅하고 Junit 을 돌렸을 때 시간내에 완료하지 못한다면
테스트 실패로 판단한다.
Junit 에서는 @Test 어노테이션의 파라미터로 Timeout 을 제공한다.
여기에 원하는 값을 넘기면 된다.
1. 예제 코드 |
3가지 함수의 예제를 볼것이다. 두함수는 시간을 벗어나는 함수 이고
하나는 시간안에 들어오도록 만들었다. 그렇게 해서 Junit 이 결과값을
출력하는지 볼것이다.
timeoutMethodOneTest() – timeout 값을 2초간 주었다. 그리고 Thread.sleep 를
5초간 주었으므로 원하는 시간보다 초과할 것을 예상할수 있다. 결과는 실패가
될것이다.
timeinMethodTwoTest() – 첫번째 함수와 반대로 timeout 설정값보다 sleep
시간을 적게 주었다. 결과는 성공으로 나올 것이다.
TimeoutMethodRunForEverTest() – timeout 값을 2초로 주었지만 함수내의
로직은 무한 반복으로 돌아가므로 실패를 예상할수 있다.
import org.junit.Test; public class TimeOutTestCase { @Test(timeout = 2000) public void timeoutMethodOneTest() throws InterruptedException { Thread.sleep(5000); System.out.println("시간제한 테스트 1!!"); } @Test(timeout = 5000) public void timeinMethodTwoTest() throws InterruptedException { Thread.sleep(3000); System.out.println("시간제한 테스트 2!!"); } @Test(timeout = 2000) public void timeoutMethodRunForEverTest() { while (true) { // Do nothing } } }
2. 실행후 결과 화면 |
소스에서 예상한대로 2개는 시간이 초과하여 실패로 표시되었다.
그리고 Failure Trace 표시를 보게 되면 설정한 2초 후에 타임아웃 되었다고 나온다.
이로써 Junit 의 유용한 기능을 하나 알게 되었다. 하지만 적용여부는 개인 몫이다.
'자바(JAVA)' 카테고리의 다른 글
웹페이지에서 구글맵 구현 (0) | 2014.02.25 |
---|---|
Java 에서 Exception 의 내용을 추출하고 싶을 때 (1) | 2014.02.12 |
[Java] 자바 데이터베이스 연동, 오라클(Oracle), MySQL DB 연결 테스트 (0) | 2014.02.09 |
Java 에서 날짜 더하기 (0) | 2014.02.08 |
Java 단위테스트 Junit 에서 Suite 로 클래스 집합 테스트 하기 (0) | 2013.10.26 |
Java 파일입출력의 다양한 방법들을 배워본다 (1) | 2012.09.28 |
자바 난수 발생 랜덤(Random) 클래스로 데이터를 추출하는 다양한 방법 (0) | 2012.09.26 |
이클립스(Eclipse) SWT 샘플 프로젝트 실행 (0) | 2012.09.20 |