웹서비스나 데이터베이스에서 데이터를 가져오는 class나 method를 unit test해야 하는 경우가 있다. 이때 몇가지 이유 때문에 테스트가 어려워진다.
이러한 경우 Mock을 이용하여 웹서비스나 데이터베이스를 가상으로 만들어서 특정한 결과를 출력하게 할 수 있다. 이때 Mockito package 를 이용하면 더 쉽게 테스트를 할 수 있다.
dev_dependencies에 Mockito package를 추가한다. Mockito 5.0.0 이상 부터는 dev_dependencies에 build_runner도 추가해줘야 한다.
test할 함수를 생성한다.
예시는 News API를 이용하여 headline 뉴스 데이터를 가져오는 함수이다.
test폴더 안에 test파일을 생성한다.
이때, 파일이름은 [테스트 이름]_test.dart 로 작성한다.
annotation으로 @GenerateMocks(["Mock클래스"]) 를 한다.
예시에서는 Dio를 사용하고 있어서 @GenerateMocks([Dio]) 라고 작성했다.
mock을 생성하기 위해서 다음 명령어를 terminal에 입력한다.
flutter pub run build_runner build
실행하면 test 폴더에 fetch_top_headline_test.mocks.dart 파일이 생성된다.
fetchTopHeadLines() 함수는 성공하면 List<NewsArticle> 을 return하고 실패하면 exception이 발생한다.
위의 2가지 경우를 when 함수를 이용해서 조건을 설정하여 테스트할 수 있다.
test를 위해서 다음 명령어를 terminal에 입력한다.
flutter test test/[테스트 파일]
테스트 결과
Flutter - Mock dependencies using Mockito
PuzzleLeaf - flutter_mvvm_tutorial
안녕하세요 재희님! 사이드 프로젝트 개발 포지션 제안드리려고 메일 보냈습니다! 확인 부탁드려요:)