[flutter] 플러터에서의 http_mock_adapter를 활용한 캘린더 기능 테스트

이번 블로그 포스트에서는 플러터(Flutter) 앱에서 HTTP 요청을 모킹하기 위해 http_mock_adapter 패키지를 사용하여 캘린더 기능을 테스트하는 방법에 대해 살펴보겠습니다.

http_mock_adapter란?

http_mock_adapter는 HTTP 클라이언트로 사용되는 http 패키지와 함께 사용할 수 있는 패키지입니다. 이 패키지를 사용하면 실제 서버 요청을 보내지 않고도 HTTP 요청을 모킹하여 테스트할 수 있습니다. 이를 통해 개발자는 외부 의존성 없이 앱의 기능을 효과적으로 테스트할 수 있습니다.

캘린더 기능 테스트

먼저, http_mock_adapter 패키지를 프로젝트에 추가해야 합니다. pubspec.yaml 파일에 아래의 의존성을 추가하세요.

dependencies:
  http_mock_adapter: ^1.2.0

다음으로, HTTP 요청을 모킹하는 테스트를 작성해보겠습니다. 아래의 예시 코드는 캘린더에서 이벤트를 가져오는 HTTP GET 요청을 모킹하는 테스트입니다.

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

void main() {
  group('Calendar API Test', () {
    test('Fetch events from API', () async {
      // 모킹된 클라이언트 생성
      final client = MockHttpClient();

      // 모킹된 클라이언트를 사용하여 테스트하고자 하는 API 요청을 모킹
      final mockResponse = '''
        {
          "events": [
            {
              "id": 1,
              "title": "Meeting",
              "date": "2022-01-01"
            },
            {
              "id": 2,
              "title": "Party",
              "date": "2022-01-02"
            }
          ]
        }
      ''';
      client.onGet('/events').reply(200, mockResponse);

      // 사용자 정의 함수를 호출하여 모킹된 HTTP 응답을 검증
      final response = await http.get(Uri.parse('https://example.com/events'));
      expect(response.statusCode, 200);

      // 받아온 응답을 파싱하고 필요한 데이터를 검사
      final responseBody = jsonDecode(response.body);
      expect(responseBody['events'].length, 2);
      expect(responseBody['events'][0]['title'], 'Meeting');
      expect(responseBody['events'][1]['title'], 'Party');
    });
  });
}

위의 코드에서는 MockHttpClient를 사용하여 모킹된 클라이언트를 생성하고, client.onGet('/events').reply(200, mockResponse)를 사용하여 /events 경로로의 GET 요청에 대한 응답을 모킹합니다. 그리고 http.get을 통해 실제 요청을 보내고 응답을 검사합니다.

결론

http_mock_adapter를 사용하면 플러터 앱에서 HTTP 요청을 모킹하여 효과적으로 테스트할 수 있습니다. 이를 통해 외부 의존성 없이 앱의 기능을 안정적으로 개발할 수 있습니다. 더 자세한 내용은 공식 문서를 참고하시기 바랍니다.