[Flutter] Unit Test using Mockito

jaehee kim·2021년 9월 23일
4

Flutter

목록 보기
16/20
post-thumbnail
post-custom-banner

Mockito?

웹서비스나 데이터베이스에서 데이터를 가져오는 class나 method를 unit test해야 하는 경우가 있다. 이때 몇가지 이유 때문에 테스트가 어려워진다.

  • 웹서비스나 데이터베이스를 호출하는 것은 테스트 성능을 저하시킨다.
  • 웹서비스나 데이터베이스가 예상치 못한 결과를 출력하는 경우 테스트는 실패한다. 이러한 경우를 flaky test 라고 한다.
  • 웹서비스나 데이터베이스를 사용해서 모든 가능한 성공과 실패 시나리오를 테스트하는 것은 어렵다.

이러한 경우 Mock을 이용하여 웹서비스나 데이터베이스를 가상으로 만들어서 특정한 결과를 출력하게 할 수 있다. 이때 Mockito package 를 이용하면 더 쉽게 테스트를 할 수 있다.



Example

1.Add the package dependencies

dev_dependencies에 Mockito package를 추가한다. Mockito 5.0.0 이상 부터는 dev_dependencies에 build_runner도 추가해줘야 한다.

pubspec.yaml

2. Create a function to test

test할 함수를 생성한다.
예시는 News API를 이용하여 headline 뉴스 데이터를 가져오는 함수이다.

fetchTopHeadline

3. Create a test file with a mock

test폴더 안에 test파일을 생성한다.
이때, 파일이름은 [테스트 이름]_test.dart 로 작성한다.

test file

annotation으로 @GenerateMocks(["Mock클래스"]) 를 한다.
예시에서는 Dio를 사용하고 있어서 @GenerateMocks([Dio]) 라고 작성했다.

fetch_top_headline_test.dart

mock을 생성하기 위해서 다음 명령어를 terminal에 입력한다.

flutter pub run build_runner build

실행하면 test 폴더에 fetch_top_headline_test.mocks.dart 파일이 생성된다.

terminal
test 폴더

4. Write a test for each condition

fetchTopHeadLines() 함수는 성공하면 List<NewsArticle> 을 return하고 실패하면 exception이 발생한다.

위의 2가지 경우를 when 함수를 이용해서 조건을 설정하여 테스트할 수 있다.

test code

5. Run the tests

test를 위해서 다음 명령어를 terminal에 입력한다.

flutter test test/[테스트 파일]

테스트 결과
test result

Example Code





Reference

Flutter - Mock dependencies using Mockito
PuzzleLeaf - flutter_mvvm_tutorial

post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 1월 12일

안녕하세요 재희님! 사이드 프로젝트 개발 포지션 제안드리려고 메일 보냈습니다! 확인 부탁드려요:)

답글 달기