[flutter] 플러터에서 http_mock_adapter를 이용한 바코드 스캔 테스트

소개

이번 블로그 포스트에서는 Flutter 앱에서 http_mock_adapter를 사용하여 바코드 스캔 테스트를 진행하는 방법을 알아보겠습니다. http_mock_adapter는 HTTP 요청을 가로채서 가짜 응답을 제공하는 API Mocking 툴입니다. 이를 활용하면 서버와의 의존성 없이 앱의 HTTP 요청을 테스트할 수 있습니다.

설치

프로젝트의 pubspec.yaml 파일에 아래 의존성을 추가해주세요.

dev_dependencies:
  http_mock_adapter: ^2.0.0

그리고 다음 명령어로 의존성을 설치해주세요.

flutter pub get

사용 방법

  1. http 패키지를 사용하여 HTTP 요청을 보내는 코드를 작성합니다. 예를 들어, 바코드를 스캔한 후 서버로 전송하는 요청을 보내는 코드를 작성한다고 가정해봅시다.
import 'package:http/http.dart' as http;

...

void sendBarcode(String barcode) async {
  String url = 'http://example.com/api/scanner';
  
  Map<String, String> headers = {
    'Content-Type': 'application/json',
  };
  
  String body = '{"barcode": "$barcode"}';
  
  http.Response response = await http.post(url, headers: headers, body: body);
  
  // 응답 처리 로직
}
  1. test 폴더에 barcodescanner_test.dart 파일을 생성하고 코드를 작성합니다.
import 'package:flutter_test/flutter_test.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';

import 'package:my_app/barcodescanner.dart';

void main() {
  group('Barcode Scanner Test', () {
    // Mock HTTP 요청을 위한 MockAdapter 인스턴스 생성
    final mockAdapter = MockAdapter();
    
    // 테스트에 사용할 가짜 응답 데이터
    final fakeResponse = '{"status": "success"}';
    
    setUp(() {
      // 모든 HTTP 요청에 대해 가짜 응답 반환 설정
      mockAdapter.onAny().reply(200, fakeResponse);
    });
    
    tearDown(() {
      // MockAdapter 초기화
      mockAdapter.reset();
    });
    
    test('Barcode scan and send request', () async {
      final scanner = BarcodeScanner();
      
      // 가짜 HTTP 요청을 가로채기 위해 MockAdapter 추가
      scanner.client = http.ClientAdapter(MockClient(mockAdapter));
      
      String barcode = "1234567890";
      
      // 바코드 스캔 시나리오를 시뮬레이션
      await scanner.scanBarcode(barcode);
      
      // 예상한 HTTP 요청이 한 번 전송되었는지 확인
      expect(mockAdapter.history.length, 1);
      
      // 서버로 전달된 바코드가 예상한 값과 일치하는지 확인
      expect(mockAdapter.history.first.body, '{"barcode": "$barcode"}');
    });
  });
}

위 코드에서는 http_mock_adapter를 사용하여 가짜 HTTP 응답을 설정하고, MockAdapter 인스턴스를 사용하여 모든 HTTP 요청을 가로채서 설정한 응답을 제공합니다. 이렇게 설정된 MockAdapter를 http.ClientAdapter 클래스를 사용하여 http 패키지의 HTTP 클라이언트에 연결합니다.

  1. 예상한 바코드 스캔 시나리오를 시뮬레이션하는 scanBarcode 메서드를 구현합니다. 이 메서드에서 http 패키지를 사용하여 서버에 요청을 보내고, 테스트할 때 가짜 응답이 반환되는지 확인할 수 있습니다.

  2. flutter test 명령어를 실행하여 테스트를 수행합니다. expect 문을 사용하여 예상한 결과를 검증할 수 있습니다.

결론

이번 블로그 포스트에서는 http_mock_adapter를 사용하여 Flutter 앱에서 바코드 스캔 테스트를 진행하는 방법을 알아보았습니다. 이를 통해 서버와의 의존성 없이 앱의 HTTP 요청을 테스트할 수 있게 되었습니다. http_mock_adapter는 다양한 HTTP 요청 시나리오를 시뮬레이션하는 데 유용한 도구이므로, 앱 개발 및 테스트에 적극적으로 활용해보시기 바랍니다.

참고 자료