remote data source impl
안녕하세요. 강의 잘 보고 있습니다.
remote data source impl 관련해서 질문이 있습니다.
@prod
@Singleton(as: CommunityRemoteDataSource)
class CommunityRemoteDataSourceApiImpl implements CommunityRemoteDataSource {
final _dio = Session().dio;
@override
Future<CommunityResponseDTO> fetchCommunities() async {
Response<dynamic> response = await _dio.get('get/community/path');
final responseDto = CommunityResponseDTO.fromJson(response.data);
return responseDto;
}
}
CommunityRemoteDataSource 의 구현체
CommunityRemoteDataSourceApiImpl 를 만들어서 사용중입니다.
ApiImpl 은 실제 서버와 통신중 이며,
http 라이브러리 Dio를 사용하고 있습니다.
여기서 테스트를 위해 DioMock 객체를 만들어서 사용하고자 합니다.
원래 CommunityRemoteDataSourceApiImpl 에 final _dio = Session().dio; 로 싱글턴으로 dio를 내부에 객체를 생성하고 있는데 이거를 주입받는 식으로 변경하여 테스트 시만 CommunityRemoteDataSourceApiImpl(DioMock()) 을 넣는 것인지, 아니면 CommunityRemoteDataSourceApiMockImpl 를 새로 또 만드는지 궁금합니다.
만약 CommunityRemoteDataSourceApiImpl(DioMock()) 로 주입을 받는 식이라면
Response<dynamic> response = await _dio.get('get/community/path'); final responseDto = CommunityResponseDTO.fromJson(response.data);해당 코드들이 Dio() 일 때, DioMock() 일 때 달라야 할 것 같은데 어떻게 처리하는 것이 맞는지 궁금합니다.
감사합니다.
답변 1
0
두 방법 모두 가능합니다.
첫 번째 방법인 생성자 주입 방식은 Dio 객체를 Mocking 하는 것이고, 두 번째 방법은 리턴하는 데이터를 Mocking 하는 것으로 미묘한 차이가 있겠으나 목적은 같기 때문에 원하는 방식을 취하시면 됩니다.
생성자 주입의 경우에 Mockito 를 적용하여 Dio 객체의 메소드 동작을 Mocking 하거나, Dio 에서 별도의 Mocking 된 객체를 제공한다면 그것을 활용하는 방법이 있습니다.
찾아본 결과 Dio 는 별도의 Mocking 된 객체 제공을 하지 않고 있습니다. Mockito를 활용하거나, 다음 패키지를 통해서도 Mocking을 할 수가 있는 듯 하니 참고하시기 바랍니다.
https://pub.dev/packages/http_mock_adapter
Node 관련 질문입니다
0
20
3
구글 소셜 로그인 후 로그인 시 구글에러
0
25
2
실습중(개인 비용 관리 앱) 문의드려요
0
41
2
6강에 비디오가 이상해요
0
20
1
Isar 마지막 업데이트는 2년전입니다.
0
28
0
수강연장부탁드려도될까요..
0
40
2
Chat GPT API 설정하기 프롬프트
0
45
2
FlutterSecureStorage 질문
0
27
0
구글 플레이 등록 시, Privact Policy URL 등록 팁
0
38
1
질문있습니다!
0
16
0
2-8강 Websocket server running on port가 안 뜹니다.
0
39
2
video_call 플러그인 설치후 에러 발생
0
42
1
마스크 json url이 안보여서 공유합니다
0
66
1
DI 에 대해 문의 좀 드립니다.
0
114
2
Bad state 에러
0
187
1
여러 화면 di강의는 언제 나올 예정인가요?
0
187
1
Riverpod 프로바이더에 의존성 주입
0
955
1
go router 의존성
0
281
1
객체가 아닌 일반 변수의 get it
0
282
1
뷰 모델 분리하기
0
334
1
네트워크 통신 에러 처리
0
331
1
데이터 추상화 문제
0
326
2
로그인(auth)관련 데이터 흐름
0
261
1
소스코드 공유
0
432
1





