티스토리 뷰

TDD

Mockito 사용법

skydev 2019. 7. 4. 12:13

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");

 

Test Double

 

 

출처: 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
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
글 보관함