Ref. https://minzzang.tistory.com/5
안녕하세요 이번에는 [Mock]에 대해 알아보겠습니다.
Mock이란 ?
실제 객체를 만들기엔 비용과 시간이 많이 들거나 의존성이 길게 걸쳐져 있어 제대로 구현하기 어려울 경우, 가짜 객체를 만들어 사용하는데 이것을 Mock이라 합니다.
Mock 객체는 언제 필요한가?
- 테스트 작성을 위한 환경 구축이 어려운 경우
- 환경 구축을 위한 작업 시간이 많이 필요할 때 Mock객체를 사용합니다. (데이터베이스, 웹서버, FTP서버 등)
- 아직 개발되지 않은 모듈을 사용하는 테스트가 필요할 때 사용합니다.
- 테스트가 특정 경우나 순간에 의존적인 경우
- 테스트 시간이 오래 걸리는 경우
Mock에 대한 기본적인 분류
1. 테스트 더블
테스트를 진행하기 어려운 경우 이를 대신해 테스트를 진행할 수 있도록 만들어주는 객체를 말합니다. Mock객체와 유사한 의미를 가지며 테스트 더블이 상위 의미로 사용됩니다.
2. 더미 객체
단순히 인스턴스화 될 수 있는 수준으로만 객체를 구현합니다. 객체의 기능은 사용하지 않고 객체 자체로만 테스트를 진행할 수 있을 때 사용합니다.
3. 테스트 스텁
더미 객체보다 좀 더 구현된 객체로 더미 객체가 실제로 동작하는 것처럼 보이게 만든 객체입니다. 객체의 특정 상태를 가정해서 만들어 특정 값을 리턴하거나 특정 메시지를 출력하는 작업을 합니다.
4. 페이크 객체
여러 상태를 대표할 수 있도록 구현된 객체로 실제 로직이 구현된 것처럼 보이게 합니다. 페이크 객체를 만드는 복잡도로 인해서 시간이 많이 걸릴 경우 적절한 수준에서 구현하거나, Mock 프레임 워크를 사용합니다.
5. 테스트 스파이
테스트에 사용되는 객체, 메소드의 사용 여부 및 정상 호출 여부를 기록하고 요청 시 알려줍니다. 특정 메소드가 호출되었을 때 또 다른 메서드가 실행이 되어야 한다와 같은 행위 기반 테스트가 필요한 경우 사용합니다. 테스트 스파이는 특수한 경우를 제외하고는 잘 쓰이지 않으며 보통 Mock 프레임워크에서 기본적으로 기능을 제공합니다.
6. Mock 객체
행위를 검증하기 위해 사용되는 객체를 지칭하며 수동으로 만들 수도 있고 프레임워크를 통해 만들 수 있습니다. 행위 기반 테스트는 복잡도나 정확성 등 작성하기 어려운 부분이 많기 때문에 상태 기반 테스트가 가능하다면 만들지 않는 게 좋습니다.
Mock 사용 시 유의사항
- Mock 프레임워크가 정말 필요한지 확인합니다.
- Mock을 사용하는 경우 테스트 케이스 유지에 복잡성이 더해지기 때문에 Mock이 없는 의존성 적은 구조로 프로그래밍합니다.
- Mock 객체는 가짜 객체일 뿐이라 실제 객체로 작동을 했을 때 작동하지 않을 수 있습니다.
참조
https://blog.naver.com/rediblue/220138247171
http://www.incodom.kr/Mock#h_ea3d40041db650b8c49e9a81fb17e208
'Fundamental > TTD (Test-driven development)' 카테고리의 다른 글
How to Setup SonarQube locally on Mac (0) | 2023.09.13 |
---|---|
Mocha vs. Jest: comparison of two testing tools for Node.js (0) | 2021.07.12 |
TestDouble (0) | 2021.07.05 |
Contract Testing for Node.js Microservices with Pact (0) | 2021.07.05 |
[Mockito] Mock 개념(Mock Object) (0) | 2021.07.05 |
댓글