[flutter] 플러터 애플리케이션에서의 http_mock_adapter 사용 사례 소개

이번 포스트에서는 Flutter 애플리케이션에서 API 통신을 모의(mock)하는 방법 중 하나인 http_mock_adapter를 사용하는 사례를 소개하고자 합니다.

1. http_mock_adapter란?

http_mock_adapter는 Flutter에서 HTTP 요청을 모의(mock)해서 API 응답을 테스트하는 용도로 사용할 수 있는 패키지입니다. 이를 통해 애플리케이션 개발 중에 API 서버와의 실제 통신 없이 간편하게 테스트를 진행할 수 있습니다.

2. 사용 사례

플러터 애플리케이션에서 http_mock_adapter를 사용하는 예제를 살펴보겠습니다.

2.1. 패키지 의존성 추가

pubspec.yaml 파일에 httphttp_mock_adapter 패키지를 추가합니다.

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

2.2. http 요청의 Mock 설정

다음은 http_mock_adapter를 활용하여 http 요청을 모의하는 예제 코드입니다.

import 'package:http_mock_adapter/http_mock_adapter.dart';

MockHttpClientAdapter _createMockAdapter() {
  final MockHttpClientAdapter mockAdapter = MockHttpClientAdapter();

  mockAdapter.onGet(
    'https://api.example.com/posts',
    reply: (request) => MockResponse(
      statusCode: 200,
      body: jsonEncode([
        {'id': 1, 'title': 'Example Post 1'},
        {'id': 2, 'title': 'Example Post 2'},
      ]),
    ),
  );

  return mockAdapter;
}

위 코드에서는 MockHttpClientAdapter 클래스를 사용하여 mock adapter를 생성합니다. onGet 메소드를 사용하여 GET 요청에 응답할 모의 데이터를 설정합니다. 위의 예제에서는 https://api.example.com/posts에 대한 GET 요청에 응답으로 두 개의 예시 게시물을 반환합니다.

2.3. 애플리케이션에서의 사용

실제 애플리케이션에서 http 패키지를 사용할 때는 이전에 생성한 MockAdapter를 HttpClientAdapter에 등록하여 사용하면 됩니다.

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

void main() async {
  final mockAdapter = _createMockAdapter();

  final client = http.Client();
  client.httpClientAdapter = mockAdapter;

  final response = await client.get(Uri.parse('https://api.example.com/posts'));

  print(response.body);

  client.close();
}

예제에서는 createMockAdapter 함수를 이용해 모의 데이터를 반환하는 MockAdapter를 생성하고, http.ClienthttpClientAdapter 속성에 MockAdapter를 등록합니다. 그런 다음, client.get 메소드를 사용하여 모의 데이터를 받아와서 출력합니다.

3. 결론

이번 포스트에서는 플러터 애플리케이션에서 http_mock_adapter를 사용하여 API 통신을 모의하는 방법에 대해 알아보았습니다. http_mock_adapter를 사용하면 애플리케이션 개발 과정에서 API 호출을 테스트하고 디버깅할 수 있으며, 테스트 코드 작성과 개발 생산성 향상에도 도움이 될 것입니다.

더 많은 정보는 공식 문서를 참고하시기 바랍니다.