티스토리 뷰
1. tdd 용어 정리
용어 | 설명 |
SUT | 테스트 대상 시스템 |
DOC | 테스트 대상 시스템에서 의존하는 컴포넌트 |
Test Double |
테스트 시에 실제 객체를 대신 할 수 있는 객체를 의미 (Stub, Mock, Fake Object...) |
2. 의존성 주입
//의존관계를 갖는 객체를 파라미터로 전달 예제
/*
날짜값 처리 유틸리티
*/
//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);
}
}
3. Mockito 란 단위테스트에서 가짜 객체를 지원해주는 프레임워크, 의존성 컴포넌트 역할
4. Mockito 메소드
- Mock() - 모의 객체를 생성하는 역할
- when() - 협력객체 메소드 반환 값을 지정해주는 역할(stub)
- verify() - SUT안의 협력객체 메소드가 호출 되었는지 확인
- times() - 지정한 횟수 만큼 협력 객체 메소드가 호출 되었는지 확인
- nerver() - 호출되지 않았는지 여부 검증
- atLeastOnce() - 최소 한 번은 특정 메소드가 호출되었는지 확인
- atLeast() - 최소 지정한 횟수 만큼 호출되었는지 확인
- atMost() - 최대 지정한 횟수 만큼 호출되었는지 확인
- clear() - 스텁을 초기화 한다
- timeOut() - 지정된 시간 안에 호출되었는지 확인
5. Mockito 사용 예
@Test
public void findProjectListByMock() {
//1. 가상객체(목객체)를 생성
ProjectEntity mock = mock(ProjectEntity.class);
userProcess.setProjectEntity(mock);
//2. 결과값(예상값)을 녹화
List<String> projects = new ArrayList<>(); //가짜 객체에서 반환 할 값 생성
projects.add("정보원 프로젝트");
projects.add("직능원 프로젝트");
projects.add("인천공항 프로젝트");
//가짜 객체에서 frndProjectList메소드의 파라미터로 ‘hjkwon’이 호출되면 위에저 지정한 값을 반환 하라고 설정
when(mock.findProjectList("hjkwon")).thenReturn(projects);
//Stub으로 지정 한 값 리턴 받음
List<String> projectList = userProcess.findProjectList("hjkwon");
assertNotNull(projectList);
assertEquals(3, projectList.size());
verify(mock, times(1)).findProjectList("hjkwon");

출처: https://redskelt.github.io/junit/mockito/2017/06/22/junit04.html
'TDD' 카테고리의 다른 글
[TDD] spring mvc file uplad 테스트 (0) | 2019.12.11 |
---|---|
Spring MVC 단위테스트 (0) | 2019.07.04 |
Mockito 사용법2 (0) | 2019.07.04 |
JUnit 사용법 (0) | 2019.07.04 |
JUnit Test에서 application context 로딩 (0) | 2019.07.04 |