jUnit과 Mockito를 이용한 단위테스트 기초 3일차
jUnit과 Mockito를 이용한 단위테스트 기초 3일차
단위테스트의 목적
- 테스트 안전장치(Harness)로써, 소프트웨어를 안전하게 보호
- 소스코드 변경으로 인해 기존 SW가 깨지면 테스트 안전장치도 깨진 상태가 됨
- 다시 안전한 상태가 되도록 테스트 코드를 변경
- 변경한 테스트 코드를 기반으로 이전에 수행했던 테스트를 다시 수행 (회귀테스트)
단위테스트의 상호작용
SUT는 테스트 대상시스템,DOC는 테스트 대상시스템에서 의존하는 컴포넌트- 단위 테스트를 진행할 때 테스트 대상 모듈이 의존하는 다른 컴포넌트에 대한 환경을 고려하여 테스트를 진행
- 테스트 대상이 의존하는 모듈의 환경 문제로 단위 테스트 작성 시 테스트 더블1로 테스트 케이스를 작성
테스트의 아키텍처
- 의존성 주입
(Dependency Injection)을 통해 의존관계를 형성 - 느슨한 의존관계를 통한 테스트 용이성2을 확보
의존성 주입
- 의존성 주입은 방식에 따라 Parameter, Constructor, Setter 주입 등으로 나눔
- 컴포넌트가 주입 받은 객체에 대한 참조를 객체 내에 유지
- 의존성 주입 프레임워크를 사용하면 Field 주입 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//의존관계를 갖는 객체를 파라미터로 전달 예제
/*
날짜값 처리 유틸리티
*/
//SUT 코드
public class DateHandler{
/*
* 현재시간을 (yyyy-MM-dd)로 조회
* @param provider
* @return
*/
public static String getCurrentTime(TimeProvider timeProvider) throws Exception {
Calendar c = null;
c = timeProvider.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(c.getTime());
}
}
//특정시간을 제공하는 DOC과 연결, 인터페이스를 통해 DI(의존성주입)
public Interface TimeProvider{
/*
* 특정시간을 제공
* @return 특정 시간
* @throws Exception
*/
Calendar getTime() throws Exception;
}
//테스트 코드
public class DateHandlerTest {
@Test
public void testGetCurrentTime() throws Exception{
String currentTime = DateHandler.getCurrentTime(new TimeProvider(){
public Calendar getTime() throws Exception{
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2014);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DAY_OF_MONTH, 1);
return c;
}
});
assertEquals("2014-01-01", currentTime);
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.