UseCase와 Repository를 테스트하면서 느낀 것들
해당 형태의 구조의 프로젝트에서 테스트코드를 작성하면서 학습하고 느낀점들을 정리.
글의 순서
- UseCase 테스트 목적
- Repository 테스트 목적
- Repository 테스트 하기
- SearchSubwayUseCaseTests 실패 후 로직 보완
- 테스트에 대한 생각 정리
안드로이드 공식 앱 아키텍처 가이드를 확인하면서 UseCase 영역에 해당하는 Domain이 Optional로 되어 있음을 확인할 수 있었음.
개인 경험에 의하면 실제로 UseCase에서 특별한 처리 없이 사실상 래핑에만 해당하는 경우도 많긴 함.
일반적인 상황에서는 Domain Optional 이어도 나쁘지 않겠지만, 기능이 하나 둘 추가되면서 Repository가 두꺼워지고
결국은 UseCase를 분리하는 과정에서 오는 피로를 생각하면 처음에 분리해두는 것도 좋다고 생각.
근데 개인적으로는 적절한 Repository 인터페이스와 각 Feature에서 구현하고 FeatureInterface를 통해서 적절하게 제공하는 형태로 래핑 없이도 잘 사용하고 있음.
아무튼 테스트 상황에서 UseCase와 Repository 테스트의 목적은 각각의 역할과 책임에 따라 다름.
UseCase 테스트 목적
- 비즈니스 로직 검증: 내가 작성한 로직이 제대로 작성되었는지 검증
- 예시: 캐싱 로직을 도입했으나, 캐싱 값 갱신을 실수로 누락
- 입력 및 출력 검증: 주어진 입력에 대해 예상된(올바른) 결과가 나오는지 검증
- 예시: 특정 실패하는 상황을 입력으로 주었을 때, 해당 상황에 대한 정확한 에러가 나타나는지 확인
- 상태 관리 검증: 상태 혹은 캐싱 값이 올바른지 검증
- 예시: 캐싱되어 있는 값이 정확한지 확인
- 통합 테스트: 주입받은 의존성 등과 전체 흐름이 올바르게 동작하는지 검증.
- 예시: 시나리오 테스트
Repository 테스트 목적
- API 통신 검증: API와 통신할 때 실제로 요청한 값에 대해 제대로 응답을 받는지 검증
- 예시: 요청에 대해 호출이 정확하게 되는지
- 에러 처리 검증: API 호출에 대한 실패 케이스 검증
- 예시: 타임아웃, 서버에서 내려주는 실패 등 검증
- 데이터 검증: 데이터베이스 CRUD가 제대로 되는지 검증
- 예시: DB가 올바르게 동작하는지 검증
Repository 테스트 하기
이전에 작업했던 사이드 프로젝트에서 지하철 검색 기능을 통해 작성

서버 통신이 잘 되는걸 확인하기 위한 테스트
고민 포인트
- 데이터 응답 값이 향후 서비스가 운영됨에 따라서 서버가 내려주는 값이 달라질 탠데, 어떻게 검증하는 것이 좋을지
- 이거 가지고 API 모니터링 시스템 만들면 서버 입장에서 모바일 코드 까보지 않고도 태그 기반으로 버전별로 직접 돌려볼 수 있어서 장점이 매우 크다고 함
- 규모가 클수록 모바일에 특정 버전에 특정 지역에 ... 보안에 의하여 정책적으로 DTO가 다르다거나 등등 너무 케이스가 다양해서 서버를 위해서 제공하는 목적도 크다고 보임.

서버 통신이 실패시 에러를 잘 뱉어내는지 테스트
고민 포인트
- 에러 메시지 나타낼 때 명령형으로 나타내는 것과 한글 쓸 지 영어 쓸지에 대한 고민

테스트에 대한 생각 정리
- 결국은 핵심 로직을 테스트 하는게 좋음. 맹목적으로 커버리지 올려봐야 꺠지기 쉬운 테스트는 서비스 생산성을 떨어뜨리고 테스트를 신뢰하지 않게 되는거 같음.
- private 메서드를 어떻게 테스트하지? 이런 생각을 했던 적도 있었지만 결과론적으로 걱정할 필요가 없었음
- 테스트는 결국 인풋에 대한 아웃풋이 올바른지 점검하는게 제일 중요하다고 생각함.
- 이렇게 작성해야 테스트가 잘 안 깨지고 신뢰할 수 있다고 느낌.
- private 메서드도 결국 인풋이 들어갔을 때 해당 함수를 호출하면서 커버리지 내에 포함시킬 수 있음
- 이런 형태로 가면 테스트 커버리지가 높아질 것 같다는 생각이 듦.
(참고)
앱 아키텍처 가이드 | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 앱 아키텍처 가이드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 가이드에는 고품질의 강력한
developer.android.com
'apple > Testing, Xcode, Environment' 카테고리의 다른 글
| iOS SnapshotTesting (스냅샷 테스팅) (3) | 2024.12.10 |
|---|---|
| 언어의 기본 자료형 Dummy를 활용해 더 명확한 테스트 작성하기 (1) | 2024.12.02 |
| [Tuist] Mise Install (2) | 2024.08.31 |
| EnableSwiftBuildSystemIntegration (0) | 2023.04.18 |
| [Xcode] Instruments - Network (0) | 2023.04.18 |