단위 테스트는 테스트 대상이 되는 코드 기능의 아주 작은 특정 영역을 실행해 보는, 개발자 작성한 코드 조각이다. 대개 단위 테스트는 특정 상황에서 특정 메서드를 시험해 본다.
1) JUnit
자바 애플리케이션의 단위 테스트 자동화 위한 프레임워크.
- 테스트를 위한 Test Class를 생성
- Test Class는 JUnit.framework.TestCase를 상속받아서 구현,테스트 메서드는 testXXX() 메서드로 구현
- testXXX() 메서드에서 테스트는 assertXXX() 메서드를 이용하여 테스트의 성공 여부를 체크
- protected void setUp() : 테스트 메서드 실행 전
- protected void tearDown() : 테스트 메서드 실행 후
2) DBUnit
데이터베이스 단위 테스트를 지원하는 프레임워크
- 테스트 데이터베이스 초기화
- 데이터베이스의 초기화는 XML 파일에서 데이터 로딩 등을 통해서 DB를 초기화 가능
- 테스트할 객체를 수행
- 데이터베이스에서 (2) 에 의해 수행된 결과를 질의
- XML 파일 등으로 부터 기대 결과를 로딩
- (3), (4)를 assert()메서드를 이용하여 비교
- 데이터베이스를 테스트 전 상태로 원상 복구
3) Easy Mock
단위 테스트는 소프트웨어 구성 요소의 각 컴포넌트를 독립된 환경에서 테스트하는 것이다.
일반적으로 소프트웨어 컴포넌트는 혼자서 동작할 수 없고 다른 컴포넌트에 대해서 종속성(Dependency)을 가지고 있기 때문에 종속 관계에 있는 컴포넌트가 완성되지 않거나 그 컴포넌트에 오류가 있으면 정상적으로 테스트를 진행할 수 없다.
이런 문제를 해결하기 위해서 사용하는 것이 Mock Object 가상 오브젝트로, 테스트를 위한 Operation만을 구현하여 테스트에 사용할 수 있다.
Easy Mock은 테스팅 프레임워크로 단위테스트에서 Mock Object 생성을 지원하며 내부적으로 자바의 Reflection을 이용하여 단위 테스트 런타임에서 가상 객체와 그 객체의 메서드를 생성하여 준다.
Download : http://easymock.org
- Mock Object 생성
- Mock Object 가 해야 하는 행동을 녹화 (Record)
- Mock Object의 행동을 수행 (reply)
- 테스트 수행
package kuho.easymock.sample;
import junit.framework.TestCase;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import org.easymock.EasyMock;
public class CalculatorTest extends TestCase {
Calculator mock;
RunCalculator runner;
protected void setUp() throws Exception {
mock = createMock(Calculator.class); // 1. create mock object
runner = new RunCalculator();
runner.setCal(mock);
super.setUp();
}
public void testDoSum() {
expect(mock.sum(1, 2)).andStubReturn(3);
//expect(mock.sum(1, 2)).andReturn(3); // 2. record mock action
replay(mock); // replay mock
this.assertEquals(3, runner.doSum(1, 2));
verify(mock);
}
public void testSayHello() {
mock.echo("Hello");
replay(mock);
runner.sayHello("Hello");
//runner.sayHello("Hello");
//runner.sayHello("Hello guho");
verify(mock);
}
}
4) Cactus
Java Enterprise Edition의 컴포넌트 중에 Servlet, JSP와 같은 컴포넌트들은 구동을 위해서 서블릿 엔진(Servlet Engine)과 같은 컨테이너(Tomcat등)를 필수적으로 필요로 한다. 이 말은 테스트를 할 때도 서블릿 엔진이 필요하다는 이야기인데, 단위 테스트 케이스를 만들었을 때 빌드 스크립트나 IDE도구에서 이런 서블릿 엔진이 필요한 클래스나 메서드를 테스트 하기가 어렵다. 이러한 테스트를 인-컨테이너 테스트(In-Container Test)라고 하는데, 이런 인 컨테이너 테스트를 지원하는 프레임워크 중의 하나가 Cactus라는 프레임워크이다.
단순 Http 의 요청과 응답만을 테스트 하고자 할때는 HttpUnit이나 SoapUI와 같은 REST 테스트 도구 혹은 Selenium과 같은 웹페이지 테스트 도구를 사용하여 input/ouput만을 보고 비교하는 블랙 박스 형태의 테스트를 사용해되 된다.
그러나 Cactus는 그보다는 웹 컨테이너에서 수행되는 컴포넌트 자체를 테스트하는 데 유용하다. request/response 뿐만 아니라 웹 클래스(서블릿 등) 자체를 화이트 박스 형태로 테스트 할 수 있는 프레임워크이다.
'Software Quality Engineering > ⓣⓔⓢⓣ' 카테고리의 다른 글
[테스트 도구] Selenium (0) | 2017.11.22 |
---|---|
[테스트 도구] 코드 커버리지 분석 도구 (0) | 2017.11.22 |
[테스트 도구] 결함 관리 도구 (0) | 2017.11.21 |
[테스트] 테스트 커버리지 (0) | 2017.11.21 |
[테스트] 테스트 케이스의 우선순위 결정 방법 (0) | 2017.11.21 |