[flutter] 플러터에서의 http_mock_adapter를 이용한 위치 정보 관련 기능 테스트

플러터(Flutter)는 다양한 모바일 애플리케이션 개발을 위한 프레임워크입니다. 앱 개발 중에는 서버와의 통신이 필요한 경우가 많은데, 이때 서버의 응답을 테스트하기 위해서는 독립적인 방법이 필요합니다. 이번 글에서는 플러터에서 위치 정보 관련 기능을 테스트하기 위해 http_mock_adapter를 사용하는 방법에 대해 알아보겠습니다.

http_mock_adapter란?

http_mock_adapter는 플러터의 http 패키지와 함께 사용되는 테스트 도구입니다. 이 도구를 사용하면 실제 서버와의 통신 없이 가짜 응답을 가지고 테스트할 수 있습니다. 예를 들어, 위치 정보를 가져오는 API를 테스트해야 할 때, 실제 서버에 요청하지 않고 가짜 응답으로 테스트할 수 있습니다.

테스트용 위치 정보 API

이번 예제에서는 OpenWeatherMap의 날씨 API를 사용하여 위치 정보를 가져오는 기능을 테스트해보겠습니다. 다음은 위치 정보를 반환하는 API의 예시입니다.

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

class LocationApi {
  static final apiBaseUrl = 'https://api.openweathermap.org/data/2.5';

  Future<String> getCurrentLocation() async {
    var url = Uri.parse('$apiBaseUrl/location');
    var response = await http.get(url);
    if (response.statusCode == 200) {
      return response.body;
    } else {
      throw Exception('Failed to get current location');
    }
  }
}

위 코드는 실제로 OpenWeatherMap API에 요청하여 위치 정보를 가져옵니다.

위치 정보 기능 테스트

위치 정보를 가져오는 기능을 테스트하기 위해 http_mock_adapter를 사용하겠습니다. 테스트하기 전에 http_mock_adapter 패키지를 프로젝트에 추가해야 합니다.

  1. pubspec.yaml 파일을 열고 의존성에 http_mock_adapter를 추가합니다.
dependencies:
  http_mock_adapter: ^1.1.0
  1. 코드에 http_mock_adapter를 적용합니다.
import 'package:flutter_test/flutter_test.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
import 'package:your_app/location_api.dart';

void main() {
  group('LocationApi tests', () {
    late LocationApi locationApi;
    late MockHttpClient mockHttpClient;

    setUp(() {
      mockHttpClient = MockHttpClient();
      locationApi = LocationApi(httpClient: mockHttpClient);
    });

    test('Should return location information', () async {
      // 가짜 응답 생성
      mockHttpClient
          .onGet('/location')
          .reply(200, {'latitude': '37.123', 'longitude': '127.456'});

      // 테스트 대상 메서드 호출
      final location = await locationApi.getCurrentLocation();

      // 검증
      expect(location, isNotNull);
      expect(location.latitude, equals('37.123'));
      expect(location.longitude, equals('127.456'));
    });

    test('Should handle API error', () async {
      // 가짜 응답 생성
      mockHttpClient.onGet('/location').reply(500, '');

      // 테스트 대상 메서드 호출
      expect(() => locationApi.getCurrentLocation(), throwsException);
    });
  });
}

위의 테스트 코드에서는 setUp 함수를 사용하여 각 테스트마다 가짜 HttpClient를 생성합니다. 그리고 mockHttpClient를 사용하여 가짜 응답을 생성하고, 이를 통해 위치 정보를 요청하고 응답을 검증합니다. 200 상태 코드와 에러 응답을 테스트하기 위한 두 개의 테스트 케이스를 작성했습니다.

이제 flutter test 명령어를 실행하여 테스트를 수행해보세요.

결론

위의 예시를 통해 플러터에서 위치 정보를 가져오는 기능을 테스트하는 방법을 알아보았습니다. http_mock_adapter를 사용하면 서버와의 실제 통신 없이 테스트를 수행할 수 있으므로 개발 및 디버깅에 매우 유용합니다. 앱 개발 중에는 서버 응답을 가짜 데이터로 테스트하는 것이 좋은 습관이며, http_mock_adapter는 이를 가능하게 해줍니다.

더 자세한 내용은 http_mock_adapter GitHub 페이지를 참조하시기 바랍니다.