[flutter] 플러터에서의 http_mock_adapter를 활용한 웹소켓 통신 테스트

웹소켓 통신은 실시간으로 데이터를 주고받기 위해 사용되는 중요한 기술입니다. 이를 테스트하기 위해서는 서버와의 연결이 필요한데, 테스트 과정에서 실제 서버를 사용하는 것은 번거롭고 불안정할 수 있습니다. 이러한 상황에서 http_mock_adapter를 활용하여 플러터 앱에서 웹소켓 통신을 테스트하는 방법을 알아보겠습니다.

1. http_mock_adapter란?

http_mock_adapter는 플러터 앱에서 HTTP 요청 및 응답을 가로채고 가짜 응답을 제공하는 기능을 제공하는 패키지입니다. 이를 활용하여 테스트 시 실제 서버로의 요청을 가로채고 모의 응답을 반환하도록 설정할 수 있습니다.

2. 웹소켓 통신 테스트를 위한 준비

테스트하기 위해 다음과 같은 패키지를 pubspec.yaml 파일에 추가해야 합니다.

dev_dependencies:
  http: any
  http_mock_adapter: any

3. 테스트 코드 작성

테스트 코드를 작성하기 위해 다음과 같이 필요한 패키지를 가져와야 합니다.

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() {
  test('웹소켓 통신 테스트', () async {
    final mockAdapter = MockAdapter();
    final url = Uri.parse('https://api.example.com/ws');
    final socket = WebSocket.connect(url); // 여기에 웹소켓 연결 코드를 작성해야 합니다.

    // 서버로부터 받은 데이터를 검증하는 코드를 작성합니다.
    socket.listen((data) {
      // 데이터 검증 로직
    });

    // 테스트에 사용할 모의 응답을 작성합니다.
    mockAdapter.onGet(url).reply(200, '모의 응답');

    // 모의 응답이 테스트에 제대로 적용되는지 확인합니다.
    final response = await http.get(url);
    expect(response.statusCode, 200);
    expect(response.body, '모의 응답');

    // 웹소켓 연결을 해제합니다.
    await socket.close();
  });
}

위 코드에서 WebSocket.connect(url) 부분은 웹소켓 서버에 연결하는 부분으로, 실제 웹소켓 연결 코드로 대체해야 합니다. 그 외의 부분에서는 http_mock_adapter를 사용하여 모의 응답을 설정하고 테스트하는 내용입니다.

4. 실행 및 결과 확인

테스트를 실행하기 위해 터미널에서 아래의 명령어를 입력합니다.

flutter test

테스트 결과가 모두 통과되면 웹소켓 통신 테스트가 성공한 것입니다.

5. 결론

http_mock_adapter를 활용하면 플러터 앱에서 웹소켓 통신을 손쉽게 테스트할 수 있습니다. 실제 서버에 의존하지 않고 응답을 모의하는 방식을 사용하여 더 빠르고 안정적인 테스트 환경을 구성할 수 있습니다. 이를 통해 앱의 실시간 데이터 처리를 효과적으로 개발하고 테스트할 수 있습니다.


참고: http_mock_adapter 문서