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은 실제 객체가 아닌 객체를 흉내내는 객체이기 때문.
출처
728x90
'Android > TDD' 카테고리의 다른 글
[TDD] TDD 란 ? (0) | 2022.02.27 |
---|---|
[Mockito] Mockito를 사용해 Instrumented Unit Test를 해보자 (0) | 2022.02.25 |
[Mockito] Mockito를 사용하여 Unit Test 를 해보자 (feat. Truth + Junit4) (2) | 2022.02.24 |
[Truth] Truth를 사용하여 Unit Test 를 해보자 (feat. Junit4) (0) | 2022.02.23 |
[Espresso] Espresso를 사용하여 UI Test 를 해보자 (feat. Junit4) (0) | 2022.02.22 |