[flutter] 플러터에서 http_mock_adapter를 이용한 파싱 테스트

이번 글에서는 플러터(Flutter) 애플리케이션에서 http_mock_adapter 패키지를 사용하여 HTTP 요청을 가로채고 가짜 응답을 제공하는 방법을 살펴보겠습니다. 이를 통해 API 요청을 테스트하면서 네트워크 의존성을 제거할 수 있습니다.

http_mock_adapter란?

http_mock_adapter는 Flutter 애플리케이션에서 HTTP 요청에 대한 테스트를 쉽게 작성할 수 있도록 도와주는 패키지입니다. 이 패키지를 사용하면 실제 네트워크 호출 없이 가짜 응답을 사용하여 애플리케이션의 API 요청을 가로챌 수 있습니다.

http_mock_adapter 설치하기

http_mock_adapter 패키지를 사용하기 위해서는 프로젝트의 pubspec.yaml 파일에 의존성을 추가해야 합니다. 아래와 같이 http 패키지와 함께 http_mock_adapter 패키지를 추가하세요.

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.4
  http_mock_adapter: ^1.2.0

의존성을 추가한 후, 터미널에서 flutter pub get 명령을 실행하여 패키지를 다운로드하세요.

사용법

이제 http_mock_adapter를 사용하여 플러터 애플리케이션의 API 요청을 테스트하는 방법을 알아보겠습니다.

먼저, 가짜 응답을 작성하고 싶은 http 클라이언트를 생성합니다. HttpMockAdapter 클래스의 인스턴스를 생성하고, 실제 http 클라이언트를 인자로 전달하여 초기화합니다.

import 'package:http/http.dart' as http;
import 'package:http_mock_adapter/http_mock_adapter.dart';

void main() {
  final client = HttpClientWithMockAdapter.buildMockClient();
}

가짜 응답을 작성하기 위해 MockAdapter 인스턴스를 생성합니다. onGet, onPost 등의 메소드를 사용하여 특정 경로와 HTTP 메소드에 대한 응답을 지정할 수 있습니다.

void main() {
  final client = HttpClientWithMockAdapter.buildMockClient();
  
  final mockAdapter = MockAdapter(client);
  
  mockAdapter.onGet('/api/users').reply(200, {'id': 1, 'name': 'John Doe'});
}

이제 http 클라이언트를 사용하여 API 요청을 보냈을 때, mockAdapter가 요청을 가로채고 가짜 응답을 제공합니다.

void main() async {
  final client = HttpClientWithMockAdapter.buildMockClient();
  
  final mockAdapter = MockAdapter(client);
  
  mockAdapter.onGet('/api/users').reply(200, {'id': 1, 'name': 'John Doe'});
  
  final response = await client.get(Uri.parse('/api/users'));
  
  print(response.statusCode); // 200
  print(response.body); // {"id": 1, "name": "John Doe"}
}

이제 애플리케이션에서는 실제 네트워크 호출 없이 http_mock_adapter를 사용하여 API 요청을 테스트할 수 있습니다.

마무리

이번 글에서는 플러터 애플리케이션에서 http_mock_adapter를 사용하여 API 요청을 테스트하는 방법에 대해 알아보았습니다. http_mock_adapter를 사용하면 네트워크 의존성 없이 가짜 응답을 사용하여 테스트를 더 쉽게 작성할 수 있습니다. 이를 통해 개발 생산성을 높일 수 있습니다.

더 자세한 내용은 http_mock_adapter GitHub 페이지를 참고하세요.