복잡한 위젯 테스트 시나리오 다루기: 기본적인 모킹/스터빙을 넘어선 복잡한 위젯 테스트 시나리오를 다루는 방법을 소개합니다. 🧩
URL 런처 및 클릭 영역 테스트 (블로그 참조): 카드 영역 클릭 시 URL 런처 패키지를 통해 원본 링크로 이동하는 기능을 검증하는 시나리오를 제시하며, 이는 블로그에서 자세히 다룹니다. 🔗
리스트 뷰 스크롤 검증 (고민 필요): 리스트 뷰의 스크롤 동작을 검증하는 시나리오를 제안하며, 이에 대한 테스트 구성에 대한 고민을 유도합니다. 📜
네트워크 이미지 에러 처리 검증 (주요 내용): URL로부터 받아오는 썸네일 이미지가 정상적이지 않을 때 디폴트 이미지가 잘 출력되는지 검증하는 시나리오를 영상에서 상세히 다룹니다. 🖼️
리스트 뷰 아이템 개수 검증 (고민 필요): 리스트 뷰가 특정 개수(예: 10개)의 아티클을 올바르게 출력하는지, 특히 화면에 보이지 않는 아이템까지 검증하는 시나리오를 제시합니다. 🔢
테스트 용이한 코드 작성의 중요성: 복잡한 시나리오나 테스트 불가능한 상황에 직면했을 때, 프로덕션 코드를 테스트에 용이한 형태로 작성하는 것(테스트 중심 개발)의 중요성을 강조합니다. ✍️
위젯 내부 HTTP 요청 모킹 방법: 위젯 내부에서 발생하는 HTTP 요청을 모킹하기 위해 Flutter 프레임워크의 HTTP 글로벌 인스턴스를 오버라이드하는 고급 기법을 사용합니다. 🌐
HTTP 오버라이드 구현 상세: HttpOverrides.runZoned를 사용하여 HttpClient, HttpClientRequest, HttpClientResponse, HttpHeaders 등의 목(Mock) 객체를 제공하고, 특정 URL에 대해 의도적인 응답(예: 403 Forbidden)을 반환하도록 스터빙하는 과정을 설명합니다. 🛠️
이미지 캐싱 클리어의 필요성: 위젯 테스트 시 이미지 캐싱이 테스트 결과에 영향을 줄 수 있으므로, 각 테스트 전에 이미지 캐시를 클리어(PaintingBinding.instance.imageCache.clear())하는 것이 중요함을 언급합니다. 🧹
find.byWidgetPredicate를 이용한 상세 검증: 단순히 위젯의 존재 여부를 넘어, find.byWidgetPredicate를 사용하여 위젯 타입과 그 위젯의 내부 속성(예: Image 위젯이 AssetImage를 사용하는지)까지 조합하여 상세하게 검증하는 방법을 시연합니다. 🔍
ListView.builder와 SingleChildScrollView의 렌더링 차이: ListView.builder는 화면에 보이는 아이템만 렌더링하고, SingleChildScrollView는 모든 아이템을 렌더링하는 차이점을 설명하며, 이는 테스트 시 검증 개수에 영향을 미칩니다. 🏗️
위젯 테스트는 지속적인 학습과 연습 필요: 위젯 테스트는 단기간에 마스터하기 어렵고, 다양한 시나리오를 통해 꾸준히 연습하고 학습해야 함을 강조하며, 제시된 모든 시나리오를 직접 시도해 볼 것을 권장합니다. 💪