플러터(Flutter)는 다양한 모바일 애플리케이션 개발을 위한 프레임워크입니다. 앱 개발 중에는 서버와의 통신이 필요한 경우가 많은데, 이때 서버의 응답을 테스트하기 위해서는 독립적인 방법이 필요합니다. 이번 글에서는 플러터에서 위치 정보 관련 기능을 테스트하기 위해 http_mock_adapter
를 사용하는 방법에 대해 알아보겠습니다.
http_mock_adapter
란?
http_mock_adapter
는 플러터의 http
패키지와 함께 사용되는 테스트 도구입니다. 이 도구를 사용하면 실제 서버와의 통신 없이 가짜 응답을 가지고 테스트할 수 있습니다. 예를 들어, 위치 정보를 가져오는 API를 테스트해야 할 때, 실제 서버에 요청하지 않고 가짜 응답으로 테스트할 수 있습니다.
테스트용 위치 정보 API
이번 예제에서는 OpenWeatherMap의 날씨 API를 사용하여 위치 정보를 가져오는 기능을 테스트해보겠습니다. 다음은 위치 정보를 반환하는 API의 예시입니다.
import 'package:http/http.dart' as http;
class LocationApi {
static final apiBaseUrl = 'https://api.openweathermap.org/data/2.5';
Future<String> getCurrentLocation() async {
var url = Uri.parse('$apiBaseUrl/location');
var response = await http.get(url);
if (response.statusCode == 200) {
return response.body;
} else {
throw Exception('Failed to get current location');
}
}
}
위 코드는 실제로 OpenWeatherMap API에 요청하여 위치 정보를 가져옵니다.
위치 정보 기능 테스트
위치 정보를 가져오는 기능을 테스트하기 위해 http_mock_adapter
를 사용하겠습니다. 테스트하기 전에 http_mock_adapter
패키지를 프로젝트에 추가해야 합니다.
pubspec.yaml
파일을 열고 의존성에http_mock_adapter
를 추가합니다.
dependencies:
http_mock_adapter: ^1.1.0
- 코드에
http_mock_adapter
를 적용합니다.
import 'package:flutter_test/flutter_test.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
import 'package:your_app/location_api.dart';
void main() {
group('LocationApi tests', () {
late LocationApi locationApi;
late MockHttpClient mockHttpClient;
setUp(() {
mockHttpClient = MockHttpClient();
locationApi = LocationApi(httpClient: mockHttpClient);
});
test('Should return location information', () async {
// 가짜 응답 생성
mockHttpClient
.onGet('/location')
.reply(200, {'latitude': '37.123', 'longitude': '127.456'});
// 테스트 대상 메서드 호출
final location = await locationApi.getCurrentLocation();
// 검증
expect(location, isNotNull);
expect(location.latitude, equals('37.123'));
expect(location.longitude, equals('127.456'));
});
test('Should handle API error', () async {
// 가짜 응답 생성
mockHttpClient.onGet('/location').reply(500, '');
// 테스트 대상 메서드 호출
expect(() => locationApi.getCurrentLocation(), throwsException);
});
});
}
위의 테스트 코드에서는 setUp
함수를 사용하여 각 테스트마다 가짜 HttpClient
를 생성합니다. 그리고 mockHttpClient
를 사용하여 가짜 응답을 생성하고, 이를 통해 위치 정보를 요청하고 응답을 검증합니다. 200 상태 코드와 에러 응답을 테스트하기 위한 두 개의 테스트 케이스를 작성했습니다.
이제 flutter test
명령어를 실행하여 테스트를 수행해보세요.
결론
위의 예시를 통해 플러터에서 위치 정보를 가져오는 기능을 테스트하는 방법을 알아보았습니다. http_mock_adapter
를 사용하면 서버와의 실제 통신 없이 테스트를 수행할 수 있으므로 개발 및 디버깅에 매우 유용합니다. 앱 개발 중에는 서버 응답을 가짜 데이터로 테스트하는 것이 좋은 습관이며, http_mock_adapter
는 이를 가능하게 해줍니다.
더 자세한 내용은 http_mock_adapter GitHub 페이지를 참조하시기 바랍니다.