-
Test Doubles - fake, stub, mockiOS 2021. 7. 22. 08:19
안녕하세요. 그린입니다🟢
이번 포스팅에서는 Test Double의 3가지 종류에 대해 알아보고 구분해보겠습니다🧑🏻💻
우선 테스트 더블??
테스트 더블은 자동화 테스트에서 실제와 유사하게 동작하면서 단순한 개체를 사용하여 동작시켜보거나 하는 테스트 과정에서
복잡성을 낮추고 독립된 코드를 테스트 검증할 수 있는 테스트 환경에서 이러한 테스트 개체가 사용되는것 입니다.
테스트 더블의 종류
1) fake
- 상용되는 앱 로직 구현과 동일하게 가짜로 앱 로직 구현을 만들고 서버 DB대신 인메모리 DB를 정의하여 해당 정보로 테스트(프로덕션 구현보다 좀 더 단순하게 만들 수 있음)
- 예를들어 네트워크 통신을 하여 서버 DB를 받아 데이터를 뿌려주는 로직을 fake로는 네트워크 통신을 하지 않고 테스트 객체를 만들어 실제 통신이 되어 이뤄지는 전 과정을 동일하게 수행하여 테스트 하는 방식
2) stub- 호출 시 반환되는 값을 미리 정의하여 반환 수행함, fake보다 낮은 테스트인게 항상 동일한 값을 반환하기에 복잡하고 상태에 따른 다양한 테스트가 불가능
- fake와 유사할 수 있지만 로직안에서 반환값이 항상 동일하기에 로직이 잘 처리되고 있는것에 대한 판별이 힘듬
- 객체를 다양한 조건으로 값을 만들어주고 던져줘도 항상 동일한 값을 반환
3) mock- 동작을 확인하는 테스트, 단위테스트에서는 거의 필요하지 않는 테스트로 단순히 해당 작업을 수행했는지 확인하는 테스트
- 비동기처리나 쓰레드가 몇번 불렷는지 판별할때 사용됨 (호출에 대한 검증 같은..!?)
현재까지 mock만 알고있었고 fake와 stub이라는것을 몰랐던 환경에서 다 mock으로 개념을 칭하고 사용했었습니다.
엄연히 테스트 용도가 다른 종류인걸 알게 되어 앞으로는 구분하여 메서드명을 짓고 개념에 따라 테스트를 하는 TDD 방식의
프로젝트를 진행해봐야겠습니다🙌
[참고자료]
https://blog.pragmatists.com/test-doubles-fakes-mocks-and-stubs-1a7491dfa3da
'iOS' 카테고리의 다른 글
Multiple Firebase Environments (0) 2021.08.21 DI & Swinject (0) 2021.08.03 ReactorKit으로 랜덤 통신 구현하기 (0) 2021.07.10 Run Loop (0) 2021.06.01 CI / CD (0) 2021.04.29