단위 테스트를 만들기 위해서는 스텁이나 목 오브젝트의 사용이 필수적
작성이 번거로운 목 오브젝트
- 테스트에서 사용하지 않는 인터페이스도 모두 일일이 구현해줘야 한다.
- 검증 기능이 있는 목 오브젝트일 경우
- 메서드의 호출 내용을 저장했다가 이를 다시 불러오는 것도 번거로움
- 테스트 메서드 별 다른 검증 기능이 필요하다면 같은 의존 인터페이스를 구현한 여러개의 목 클래스를 선언해야 한다.
⇒ 번거로운 목 오브젝트를 편리하게 작성하도록 도와주는 오브젝트 지원 프레임워크가 있다.
Mockito 프레임워크
- Mockito 같은 목 프레임워크의 특징은 목 클래스를 일일이 준비할 필요가 없다.
- 간단한 메서드 호출만으로 다이나믹하게 특정 인터페이스를 구현한 테스트용 목 오브젝트를 만들 수 있다.
UserDao 인터페이스를 구현한 테스트용 목 오브젝트는 스태틱 메서드를 한번 호출하면 만들어진다.
UserDao mockUserDao = mock(UserDao.class);
- mock() 메서드
- org.mockito.Matchers 클래스에 정의된 스태틱 메서드
- Mock 객체로 만들어졌을 뿐 아무런 기능이 없다.
스텁 기능 추가하기
when(mockUserDao.getAll()).thenReturn(this.users);
- mockUserDao.getAll() 이 호출되었을 때, users 리스트를 반환한다는 선언
- mockUserDao 의 getAll 메서드가 호출되면 users 리스트가 자동으로 반환
verify(mockUserDao, times(2)).update(any(User.class));
- mockUserDao 의 update() 메서드가 두번 호출되었는지 확인하는 검증 코드