1. Junit 테스트를 실행하는 방법
일단 본인의 이클립스에 junit 이 플러그인 되어 있다면 실행 버튼으로 간단하게 실행이 가능하다.
안되어 있다면 window > update > 검색해서 junit 플러그인을 설치하도록 하자
아니라면 java junit.swingui.TestRunner 를 실행하여 그래픽 환경에서 테스트 할 소스 파일을 선택하여 테스트 하거나
java junit.textui.TestRunner 테스트할 소스파일이름(확장자 제외) 를 실행하여 테스트 할 수 있다
2. 무엇을 테스트 해야 하는가?
2,1 경계조건
- 값이 기대한 형식과 일치하는가?
- 적절한 순서대로 있거나 그렇지 않은가?
- 적당한 최소값과 최대값 사이에 있는 값인가?
- 값이 존재하는가?
- 확실히 충분한 개수의 값이 존재하는가?
- 모든것인 제시간에 순서대로 일어나는가?
* 모든 경계조건의 테스트는 Black Box 혹은 White Box 의 테스트 케이스를 만들어 테스트 하는것이다.
* 테스트 케이스는 db가 될 수도 있고 파일이나 하드코딩 일수도 있다.
2.2 교차확인
- 테스트 하고자 하는 메소드를 여러가지 다른 알고리즘에 의해 확인해 본다.
- 테스트 하고자 하는 메소드가 다른 클래스에서 영향을 받을 경우 여러개의 클래스에서 결과 값을 교차 확인한다.
* 회귀테스트 : 모듈을 수정한 후 동작에 이상이 없는지 확인하는 테스트
2.3 에러발생
- 예상되는 에러나 예외상황을 발생시켜보자
3. 모의객체를 이용한 테스트 (Mock Object)
단위테스트의 목적은 한번에 메스드 하나만 실행해 보는 것인데, 그 메소드가 네트워크나 데이터베이스나 서블릿 엔진과 같은
제어하기 어려운 것들과 연관되어 있다면 어떻게 할 것인가?
이때에 우리는 모의 객체(Mock Object)를 사용하여 테스트를 수행할 수 있다.
3.1 모의객체를 사용하는 경우
- 진짜 객체를 준비하기 어렵거나 진짜 객체가 느릴 경우
- 진짜 객체가 직접 유발시키기 어려운 동작을 하거나 진짜 객체가 아직 존재하지 않을 경우
3.2 모의객체 예제
3.2.1 개발자가 모의객체를 직접 정의하는 경우
-------------------------------------------------------------------------------------------
import junit.framework.*;
import java.util.*;
// 현재 시간을 구해서 애플리케이션에서 사용하도록 애플리케이션 환경 객체에 세팅하는 클래스
// 애플리케이션 환경 객체가 없어서 모의객체로 구현하였다.
public void TestChecker extends TestCase {
public void testQuittingTime(){
MockSystemEnv env = new MockSystemEnv();
Calendar cal = Calendar.getInstance();
cal.set(cal.YEAR, 2004);
cal.set(cal.MONTH, 10);
cal.set(cal.DAY_OF_MONTH, 1);
cal.set(cal.HOUR_OF_DAY, 16);
cal.set(cal.MINUTE, 55);
long t1 = cal.getTimeInMillis();
env.setTime(t1);
.
.
.
}
}
-------------------------------------------------------------------------------------------
setTime 메소드를 구현한 MockSystemEnv 이라는 모의객체를 생성하여 테스트한다.
3.2.2 mockObject 를 사용하여 정의하는 경우
-------------------------------------------------------------------------------------------
모의객체 패키지는 http://www.mockobjects.com 에서 다운받을 수 있다.
아래는 서블릿 엔진에 대한 모의 객체를 사용한 예제이다.
-------------------------------------------------------------------------------------------
import junit.framework.*;
import com.mockobjects.servlet.*;
public class TestTempServlet extands TestCase {
public void test_bad_parameter() throw Exception {
TemperatureServlet s = new TemperatureServlet();
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletRequest response = new MockHttpServletResponse();
}
}
-------------------------------------------------------------------------------------------
MockHttpServletRequest 와 MockHttpServletRequest 는 com.mockobjects.servlet.* 패키지에서
지원하는 모의객체이다.
4. 좋은 테스트
- 테스트는 자동화 되어 IDE 툴의 버튼 하나 누르는 것 이상의 수고를 요ㅛ구해서는 안된다.
- 반복적, 독립적 테스트가 가능해야 한다.
- 단위 테스트의 코드는 프로젝트에서 선정한 전문적인 표준에 의거해야한다.
'컴퓨터공학 기초 > Java' 카테고리의 다른 글
null String problem (0) | 2012.03.10 |
---|---|
단위테스트 JUNIT (3) (0) | 2012.03.09 |
단위테스트 JUNIT (1) (1) | 2012.03.07 |
Easier click Listener, OnClick의 간단한 코드작성 방법 (0) | 2012.02.14 |
[Android] 버튼 이벤트 처리 (1) | 2012.02.14 |