개발/Flutter & Dart

Flutter Test 02. Mockito

차파랑 2025. 5. 6. 17:51

1. Mockito 및 Build Runner 설치

flutter pub add mockito build_runner --dev
  • --dev: 개발 의존성(dev_dependencies)으로 설치
  • mockito: 테스트용 Mock 객체를 생성하기 위한 패키지
  • build_runner: 코드 생성을 위한 명령어 실행 도구

2. 사용 방법 요약

  1. 테스트 대상에서 사용하는 객체(class)를 Mock 처리
  2. 아래와 같이 어노테이션을 선언
    • @GenerateMocks([http.Client])
  3. 아래 명령어로 Mock 클래스 생성
    • dart run build_runner build --delete-conflicting-outputs
  • --delete-conflicting-outputs: 기존 생성된 코드와 충돌하는 파일 삭제 후 재생성

버전 이슈 해결 (Mockito 5.4.6 오류 발생 시)

pubspec.yaml 설정 예시

    dependencies:
      analyzer: ^6.0.0

    dev_dependencies:
      mockito: ^5.0.6
  • 일부 버전에서 analyzermockito 간 의존성 충돌 발생
  • 위와 같이 다운그레이드하면 해결 가능

출처: 인프런 커뮤니티 질문

4. expect() 사용 예시

타입 검사

expect(await fetchAlbum(client), isA<Album>());
  • isA<T>(): 값이 T 타입인지 확인

예외 검사

expect(fetchAlbum(client), throwsException);
  • throwsException: 해당 함수가 예외를 던지는지 확인

주의: 아래와 같이 await를 함께 사용하면 테스트가 실패함

  • expect(await fetchAlbum(client), throwsException); // 실패

→ 예외가 발생하면 첫 줄에서 테스트가 종료되므로, expect()에 도달하지 못함

올바른 방식:

 expect(fetchAlbum(client), throwsException);

5. Mock 객체 직접 생성이 불필요한 경우

  • 이미 Mock 클래스가 제공되는 경우, @GenerateMocks 없이도 바로 사용할 수 있음