본문 바로가기

Android/TDD

[Mockito] Mock 객체 란?

728x90

Mock 이란?

  • 실제 객체를 다양한 조건으로 인해 제대로 구현하기 어려울 경우 가짜 객체를 만들어 사용하는데, 이를 Mock 객체라 한다.

Mock 객체가 필요한 경우.

  • 테스트 작성을 위한 환경 구축이 어려운 경우.
  • 테스트가 특정 경우나 순간에 의존적인 경우.
  • 시간이 걸리는 경우

 

Mock에 대한 기본적인 분류 개념.

1. 테스트 더블

  • 테스트를 진행하기 어려운 경우 대신해 테스트를 진행할 수 있도록 만들어주는 객체.
  • Mock객체와 유사한 의미, 테스트 더블이 좀더 상위 의미로 사용.

2. 더미 객체(Dummy Object)

  • 단순히 인스턴스화될 수 있는 수준으로만 객체를 구현.
  • 객체가 필요할 뿐 객체의 기능까지는 필요하지 않은 경우에 사용.

3. 테스트 스텁(Test Stub)

  • 더미 객체가 실제로 동작하는 것처럼 보이게 만들어놓은 객체.
  • 특정 값을 리턴해 주거나 특정 메시지를 출력해주는 작업.
  • 특정 상태를 가정하여 하드코딩된 형태이기 때문에, 로직에 따른 값의 변경을 테스트 할 수 없다.

4. 페이크 객체(Fake Object)

  • 여러 상태를 대표할 수 있도록 구현된 객체로, 실제 로직이 구현된 것 처럼 보이게 한다.
  • 실 DB에 접속해 동일한 모양이 보이도록 객체 내부에 구현할 수 있다.

5. 테스트 스파이(Test Spy)

  • 테스트 더블로 구현된 객체에 자기 자신이 호출 되었을 떄 확인이 필요한 부분을 기록하도록 구현.
  • 행위 기반 테스트가 필요한 경우 사용.

6. Mock 객체

  • 행위를 검증하기 위해 사용되는 객체를 지칭.
  • 수동으로 만들 수도 있고 프레임 워크를 사용해 만들 수 있다.

 

Mock 객체는 행위 검증에 사용하고, Stub은 상태 검증에 사용한다.

 

 

Mock 사용시 유의사항.

  • Mock을 사용하는 경우 테스트 케이스 유지에 복잡성이 더해지기 때문에, 의존성이 적은 구조로 프로그래밍 한다.
  • 실제 객체로 작동을 해보았을 때 예상한 것 처럼 정상 동작하지 않을 수 있다. Mock은 실제 객체가 아닌 객체를 흉내내는 객체이기 때문.

 

 

 

출처

http://www.incodom.kr/Mock

728x90