[flutter] 플러터 테스트에서의 http_mock_adapter 사용 시 주의사항

플러터(Flutter)는 모바일 애플리케이션 개발을 위한 프레임워크입니다. 애플리케이션 내에서 네트워크 통신을 테스트할 때, 흔히 사용되는 도구는 http_mock_adapter입니다. 이 도구는 실제 서버 대신 가상의 응답 데이터를 제공하여 테스트를 진행할 수 있게 해주는 장점이 있습니다.

하지만 http_mock_adapter를 사용할 때 몇 가지 주의사항이 있습니다. 이번 글에서는 플러터 테스트에서 http_mock_adapter 사용 시 주의사항을 알아보겠습니다.

1. 앱의 의존성 주입(Dependency Injection) 처리

플러터 테스트에서는 모의 객체(Mock Object)를 사용하여 의존성을 주입하는 것이 권장됩니다. http_mock_adapter도 마찬가지로 일반적인 http 클라이언트 대신 모의 객체로 대체하여 사용해야 합니다.

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

// 모의 객체를 생성하여 의존성 주입
final client = MockClient((request) async {
  // 가상의 응답 데이터를 반환
  return http.Response('Mocked Response', 200);
});

2. 테스트 시 모의 객체 설정

http_mock_adapter를 사용할 때는 테스트 케이스마다 모의 객체를 설정해야 합니다. 각 테스트 전에 새로운 모의 객체를 생성하고, 필요한 응답 데이터를 설정해야 합니다.

test('테스트 케이스 1', () async {
  final client = MockClient((request) async {
    // 응답 데이터 설정
    return http.Response('Mocked Response 1', 200);
  });

  // 테스트 코드 작성
});

test('테스트 케이스 2', () async {
  final client = MockClient((request) async {
    // 응답 데이터 설정
    return http.Response('Mocked Response 2', 200);
  });

  // 테스트 코드 작성
});

3. 테스트 완료 후 리소스 정리

각 테스트가 완료된 후에는 http_mock_adapter에서 사용된 리소스를 정리해야 합니다. 이를 위해 tearDown() 메서드에서 사용한 모의 객체를 닫아주어야 합니다.

tearDown(() {
  client.close(); // 모의 객체 닫기
});

4. 모의 응답 데이터 작성

http_mock_adapter를 사용할 때는 모의 응답 데이터를 실제 서버 응답과 동일한 형식으로 작성해야 합니다. 이를 통해 테스트 케이스가 실제 서버에 대한 응답과 일치하는지 확인할 수 있습니다.

test('테스트 케이스', () async {
  final client = MockClient((request) async {
    // 모의 응답 데이터 작성
    Map<String, dynamic> responseJson = {
      'data': {
        'id': 123,
        'name': 'John Doe'
      }
    };
    
    return http.Response(json.encode(responseJson), 200);
  });

  // 테스트 코드 작성
});

위에서 살펴본 주의사항을 준수하여 http_mock_adapter를 사용하면, 플러터 애플리케이션의 네트워크 통신을 테스트할 때 가상의 응답 데이터를 사용하여 간편하게 테스트할 수 있습니다. 이를 통해 개발자는 네트워크 요청 및 응답을 안정적으로 검증하고, 애플리케이션의 동작을 확신할 수 있습니다.

참고 자료: