[flutter] 플러터에서의 http_mock_adapter를 이용한 위치 기반 알림 테스트

이번 글에서는 Flutter 앱에서 위치기반 알림을 테스트하는 방법에 대해 알아보겠습니다. 테스트를 위해 http_mock_adapter를 사용하여 서버와 통신하는 부분을 가짜 응답으로 대체할 것입니다.

1. 프로젝트 설정

  1. Flutter 프로젝트를 생성합니다.
  2. http 패키지와 http_mock_adapter 패키지를 pubspec.yaml 파일에 추가합니다.
dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.4
  http_mock_adapter: ^1.0.1
  1. 패키지를 가져오기 위해 터미널에서 flutter pub get을 실행합니다.
  2. lib 폴더 내에 api.dart 파일을 생성합니다.

2. 위치 정보 가져오기 API 작성하기

api.dart 파일에서 위치 정보를 가져오는 API를 작성해 봅시다. 이 API는 서버로부터 사용자의 위치 정보를 가져오는 역할을 합니다.

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

class LocationApi {
  static Future<String> getLocation() async {
    final response = await http.get(Uri.parse('https://api.example.com/location'));
    if (response.statusCode == 200) {
      return response.body;
    } else {
      throw Exception('Failed to get location');
    }
  }
}

위 코드에서는 http 패키지의 get 메서드를 통해 서버에 GET 요청을 보냅니다. 응답이 성공하면 위치 정보가 반환되고, 실패하면 Exception이 발생합니다.

3. 위치 기반 알림 테스트하기

이제 위치 기반 알림을 테스트할 준비가 되었습니다. 하지만 서버가 아직 준비되지 않았으므로, http_mock_adapter를 사용하여 가짜 응답을 준비해야 합니다.

import 'package:flutter_test/flutter_test.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
import 'package:your_app/api.dart';

void main() {
  final mockClient = MockAdapter();

  test('Location based notification test', () async {
    final expectedLocation = 'Seoul, Korea';
    
    mockClient.onGet('https://api.example.com/location').reply(200, expectedLocation);

    final location = await LocationApi.getLocation();

    expect(location, expectedLocation);
  });
}

위 테스트 코드에서는 MockAdapter를 사용하여 가짜 응답을 준비하였습니다. onGet 메서드를 통해 GET 요청을 가로채고, reply 메서드를 통해 가짜 응답을 지정합니다. 테스트는 getLocation 메서드를 호출하고, 반환된 위치 정보가 예상한 값과 일치하는지를 확인합니다.

4. 테스트 실행하기

테스트를 실행하기 위해서는 다음 명령어를 터미널에서 실행합니다.

flutter test test/api_test.dart

테스트가 성공하면, 가짜 응답을 통해 서버와 통신하는 위치 기반 알림의 테스트가 완료되었습니다.

참고 자료