이번 포스팅에선 Mock을 만들고 여러 기능들을 제공하는 Mock 프레임워크 Mockito에 대해 알아보겠습니다.
Mock이란?
Mockito에 대해 설명하기 전에 Mock에 대한 개념부터 설명하겠습니다.
Mock은 한글로 "모의, 가짜의"라는 뜻으로 테스트할 때 필요한 실제 객체와 동일한 모의 객체를 만들어 테스트의 효용성을 높이기 위해 사용합니다.
위키에 정의된 Mock은 다음과 같습니다.
모의 객체(Mock Object)란 주로 객체 지향 프로그래밍으로 개발한 프로그램을 테스트할 경우 테스트를 수행할 모듈과 연결되는 외부의 다른 서비스나 모듈들을 실제 사용하는 모듈을 사용하지 않고 실제의 모듈을 "흉내"내는 "가짜" 모듈을 작성하여 테스트의 효용성을 높이는 데 사용하는 객체이다. 사용자 인터페이스(UI)나 데이터베이스 테스트 등과 같이 자동화된 테스트를 수행하기 어려운 때 널리 사용된다. - 위키백과, Mock Object
아래 예제를 보면서 설명드리겠습니다.
@Service
public class StudyService {
public Student getStudent() {
// DB에서 study 테이블 조회 (부하가 많이 걸리는 작업)
}
}
위처럼 정의된 DB에서 Student 테이블을 읽어 Student 객체를 리턴하는 메소드를 테스트하고 싶은데
매번 테스트할 때마다 DB를 읽어오는 것이 부하가 많이 걸리고 시간도 많이 걸린다면 정말 힘들 겁니다.
그래서 Student를 DB에서 읽어오지 않고 이를 가짜 객체 즉, mock으로 만들어서 DB에 있는 테이블 접근을 최소화할 수 있습니다.
mock 객체를 만들면 테스트 시간도 줄이면서 불필요한 리소스 소비를 막고 객체의 행동까지 테스트하는 개발자 마음대로 조정할 수 있으니 테스트할 때 반드시 필요한 부분입니다.
위 예제말고도 부하가 많이 걸리는 작업이나 아직 interface만 나온 경우에도 mock 객체로 만들어서 테스트할 수 있습니다.
Mockito란?
mock을 쉽게 만들고 mock의 행동을 정하는 stubbing, 정상적으로 작동하는지에 대한 verify 등 다양한 기능을 제공해주는 프레임워크입니다.
아래 mockito 공식 사이트에 나와있는 이미지를 보니 mock + mojito 합성어인듯합니다.
mock을 쉽게 만들고 mock의 행동을 정하는 stubbing, 정상적으로 작동하는지에 대한 verify 등 다양한 기능을 제공해주는 프레임워크입니다.
유닛 테스트를 할 때 사용하는데 JetBrains이 발표한 2020년 통계에 따르면 유닛 테스트를 하는 자바 개발자 중 43%가 mockito를 사용하고 있다고 합니다. 음 그럼 나머지들은 어떤 걸 쓰고 있는지 궁금하네요. (mockito와 같은 mock 프레임워크는 EasyMock, JMock이 있습니다.)
다음 시간엔 Mockito를 설정하고 사용하는 방법에 대해서 알아보겠습니다.
읽어주셔서 감사합니다.
댓글