HTTP 아날로그 어댑터를 통해 HTTP 요청/응답 워크플로우를 아날로그화하여 Dart/FLUTER에서 유효한 테스트를 수행합니다.
http-mock-adapter는 Dio 및 Mockito를 기반으로 구축된 Dart 패키지입니다.미리 정의된 어댑터를 통해 요청과 상응하는 응답을 정의하면 Dio를 통해 보내는 요청을 모의할 수 있습니다.또는 http mock adapter의 사용자 정의 어댑터에 있는 모키토를 통해 간단하게 데이터를 시뮬레이션할 수 있습니다.
문제.
http 아날로그 어댑터는 어떤 문제를 해결했습니까?
문제는 문제의 본질인 효율적인 테스트에 있다.
일반적으로 한 항목에는 여러 가지 코드가 포함될 수 있습니다.
네트워크 요청을 보내는 데 시간이 걸립니다.서버가 항상 부팅되고 실행될 것이라고 보장할 수도 없습니다.이 밖에 너무 많은 요청을 보내는 것도 문제가 있는데, 특히 소프트웨어의 일부분을 테스트하기 위해서다.
http 아날로그 어댑터는 실제 서버와 상호작용하는 문제를 해결하는 데 목적을 둔다.
솔루션
자원 집약형 임무를 테스트하는 데 보편적으로 받아들여지는 해결 방안은 데이터 시뮬레이션이다.아날로그 데이터는 인공 데이터로 실제 절차를 모의하는 작업 흐름에 사용되며 보통 소프트웨어 테스트 계획의 일부분이다.
문외한의 말로는 개발자/테스트원이 대상을 모의하여 대상의 구체적인 실현을 빙빙 돌려서 맞춤형 행위를 일으킨다.예를 들면 다음과 같습니다.
응용 프로그램 등록 기능을 테스트하려는 UI를 가정해 봅시다. 전자 우편과 비밀번호가 있는 등록 양식을 제공해야 할 수도 있습니다. 등록 단추를 누르면 응용 프로그램이 사용자의 입력을 처리하고, 화면에 적당한 요소를 표시할 수 있도록 등록 과정의 결과를 기다려야 할 수도 있습니다.
만약 응용 프로그램이 원격 서버에 연결되어 등록을 하고 많은 작은 의존항(로컬 캐시 사용자 입력, 서버에 로그 데이터 전송 등)을 포함해서 등록 요청을 서버에 성공적으로 보낼 수 있다면 어떤 문제가 발생합니까?다음과 같은 여러 가지 결과가 발생할 수 있습니다.
실제 등록 기능을 만드는 시뮬레이션을 테스트하고 사용자 정의 데이터, HTTP 클라이언트, HTTP 요청과 응답을 정의할 수 있습니다. 논리는'새 사용자를 등록하시겠습니까? 저는 시뮬레이션 대상을 만들 것입니다. 이 대상은'성공 등록'의 인공 응답을 생성합니다!"이 특정/등록 루트에 어떤 종류의 데이터를 보내면!"
http 아날로그 어댑터의 사용 편의성을 보여줌으로써 특정 요청에 대한 응답으로 특정한 응답을 되돌릴 수 있습니다.
import 'package:dio/dio.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
void main() async {
final dio = Dio();
final dioAdapter = DioAdapter();
dio.httpClientAdapter = dioAdapter;
const path = 'https://example.com';
dioAdapter
.onGet(path)
.reply(200, {'message': 'Successfully mocked GET!'})
.onPost(path)
.reply(200, {'message': 'Successfully mocked POST!'});
final onGetResponse = await dio.get(path);
print(onGetResponse.data); // {"message":"Successfully mocked GET!"}
final onPostResponse = await dio.post(path);
print(onPostResponse.data); // {"message":"Successfully mocked POST!"}
}
이러한 간단한 절차를 통해 우리는 맞춤형 DioAdapter(아날로그 요청에 개발자의 우호적인 방법을 공개하는 클래스)를 사용하여 Dio(HTTP 클라이언트)가 미리 정의된 상태 코드, 데이터 등을 사용하여 https://example.com
에 대한 GET와 POST 요청을 아날로그화할 수 있음을 지시할 수 있습니다!서버 문제가 없고 실행 속도가 매우 빠르며 사용하기 쉽다. 의존성과 세부 사항을 걱정할 필요가 없고 필요와 선호에 따라 우리가 원하는 프로그램을 어떻게 테스트하는지 제어할 수 있다.
또는 사용자 정의 차단기를 통해 Dio 요청을
DioInterceptor
목록에 추가하여 Dio 요청을 시뮬레이션할 수 있습니다.import 'package:dio/dio.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
void main() async {
final dio = Dio();
final dioInterceptor = DioInterceptor();
dio.interceptors.add(dioInterceptor);
const path = 'https://example.com';
dioInterceptor
.onDelete(path)
.reply(200, {'message': 'Successfully mocked DELETE!'})
.onPatch(path)
.reply(200, {'message': 'Successfully mocked POST!'});
final deleteResponse = await dio.delete(path);
print(deleteResponse.data); // {"message":"Successfully mocked DELETE!"}
final postResposne = await dio.patch(path);
print(postResposne.data); // {"message":"Successfully mocked POST!"}
}
보상: Mockito로 남을 조롱하는 것에 익숙해지면?http 아날로그 어댑터에는 다음과 같은 아날로그 버전dio.interceptors
이 포함되어 있습니다.import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:test/test.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
import 'package:mockito/mockito.dart';
void main() {
Dio dio;
Response<dynamic> response;
group('DioAdapterMockito', () {
DioAdapterMockito dioAdapterMockito;
setUpAll(() {
dio = Dio();
dioAdapterMockito = DioAdapterMockito();
dio.httpClientAdapter = dioAdapterMockito;
});
test('mocks any request/response via fetch method', () async {
final responsePayload = jsonEncode({'response_code': '200'});
final responseBody = ResponseBody.fromString(
responsePayload,
200,
headers: {
Headers.contentTypeHeader: [Headers.jsonContentType],
},
);
final expected = {'response_code': '200'};
when(dioAdapterMockito.fetch(any, any, any))
.thenAnswer((_) async => responseBody);
response = await dio.get('/route');
expect(expected, response.data);
});
});
}
패키지 정보
이 패키지는 수요에 따라 개발되고 있다Lomsa.HTTP 요청을 쉽게 모의할 수 있는Dart 패키지를 찾을 수 없어서 만들기로 했습니다.
패키지가 Dio 요청을 시뮬레이션할 수 있는 상태에 도달했습니다.우리는 계속 그것을 개발하고 추가 기능, 빈 안전성, 깨끗하고 사용하기 쉬운 API, 최적화된 코드, 기타 HTTP 클라이언트와의 통합 등을 통해 더욱 잘 사용할 계획입니다!
결어
데이터 시뮬레이션은 매우 중요한 개념으로 철저한 테스트를 거친 코드 라이브러리를 가지고 소프트웨어가 가능한 한 잘 작동하도록 하려는 개발자에게 매우 유용하다.
우리는 네가 http-mock-adapter에게 기회를 주기를 바란다.하면, 만약, 만약...👍 만약 오류가 발생하거나 아주 좋은 기능을 생각해서 패키지를 개선할 수 있다면 메시지를 발표하고 issues' section를 통해 저희에게 연락하세요!
Reference
이 문제에 관하여(HTTP 아날로그 어댑터를 통해 HTTP 요청/응답 워크플로우를 아날로그화하여 Dart/FLUTER에서 유효한 테스트를 수행합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lomsa/simulating-http-request-response-workflow-for-effective-testing-in-dart-flutter-via-http-mock-adapter-5eii텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)