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

테스트와 디버깅 과정에서 플러터 애플리케이션을 개발하다 보면, 웹 서버 API로의 요청과 응답을 모의(mock)해야 할 때가 있습니다. 이러한 경우에 http_mock_adapter 패키지가 유용하게 사용될 수 있습니다. http_mock_adapter를 사용하면, 실제 네트워크 연결 없이도 웹 서버에 대한 요청과 응답을 손쉽게 조작할 수 있습니다. 이번 글에서는 http_mock_adapter를 활용한 예제를 소개하도록 하겠습니다.

http_mock_adapter란?

http_mock_adapter는 Flutter의 http 패키지와 함께 사용할 수 있는 패키지로, 테스트를 위해 네트워크 요청과 응답을 가로채어 조작할 수 있는 기능을 제공합니다. 이 패키지를 사용하면, 실제 API 호출 없이도 가상의 응답을 생성하여 다양한 테스트 시나리오를 시뮬레이션할 수 있습니다.

http_mock_adapter 사용 예제

가정해보겠습니다. 플러터 애플리케이션에서 사용자 목록을 조회하는 기능을 구현해야 한다고 합시다. 이를 위해서는 백엔드 API에 GET 요청을 보내야 합니다. 그런데, 테스트 중에 실제 서버에 요청을 보내면 비효율적이고, 의도하지 않은 결과가 나올 수 있습니다. 이런 상황에서 http_mock_adapter를 사용하여 모의 응답을 생성할 수 있습니다.

먼저, http_mock_adapter 패키지를 프로젝트에 추가해야 합니다. pubspec.yaml 파일에 다음과 같이 패키지를 추가합니다.

dependencies:
  http: ^0.13.3
  http_mock_adapter: ^3.0.0

이제 아래의 코드를 참고하여 http_mock_adapter를 사용한 모의 응답을 생성해보겠습니다.

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

Future<List<String>> fetchUsers() async {
  final mockAdapter = MockAdapter();
  final httpClient = http.Client();

  // API 요청 URL
  final url = Uri.parse('https://api.example.com/users');

  // 모의 응답 생성
  mockAdapter.onGet(url).reply(200, {
    'results': [
      {'name': 'John'},
      {'name': 'Alice'},
      {'name': 'Bob'}
    ]
  });

  final response = await httpClient.get(url);

  if (response.statusCode == 200) {
    // 응답 결과를 파싱하여 사용자 목록 반환
    final data = response.body as List<dynamic>;
    final users = data.map((user) => user['name'] as String).toList();
    return users;
  } else {
    // 에러 처리
    throw Exception('Failed to fetch users');
  }
}

void main() async {
  final users = await fetchUsers();
  print(users);
}

위의 코드 예제에서는 fetchUsers 함수를 통해 사용자 목록을 조회하고 있습니다. http_mock_adapterMockAdapter 클래스를 사용하여 모의 응답을 설정하고, http 패키지의 Client 클래스를 사용하여 실제 요청을 보냅니다. 이렇게 하면 실제 서버가 아닌 모의 응답이 받아지게 됩니다.

예제 코드에서는 mockAdapter.onGet(url).reply(200, ...)와 같이 모의 응답을 설정하고 있습니다. 여기서 reply 메서드의 두 번째 파라미터에는 원하는 응답 데이터를 입력하면 됩니다. 위의 예제에서는 사용자 목록이라는 응답 데이터를 JSON 형식으로 설정하였습니다.

이제 main 함수에서 fetchUsers 함수를 실행하면, 모의 응답을 받아와 사용자 목록을 출력합니다. 이를 통해 개발자는 실제 서버와의 의존 없이 기능을 테스트할 수 있습니다.

결론

http_mock_adapter를 사용하면 플러터 애플리케이션에서 네트워크 요청과 응답을 모의할 수 있습니다. 이를 통해 개발 및 테스트 과정에서 실제 서버와의 의존성을 제거하고, 원하는 시나리오에 따라 응답을 조작할 수 있습니다. 이를 통해 더 신속하고 효율적인 개발을 할 수 있습니다.

참고 문서