inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 중급 3편 - 의존성 주입 가이드

25-실제 데이터를 가져오도록 수정. DI 환경 구성

remote data source impl

해결된 질문

291

김보겸

작성한 질문수 8

0

안녕하세요. 강의 잘 보고 있습니다.

 

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 객체를 만들어서 사용하고자 합니다.

 

  1. 원래 CommunityRemoteDataSourceApiImpl 에 final _dio = Session().dio; 로 싱글턴으로 dio를 내부에 객체를 생성하고 있는데 이거를 주입받는 식으로 변경하여 테스트 시만 CommunityRemoteDataSourceApiImpl(DioMock()) 을 넣는 것인지, 아니면 CommunityRemoteDataSourceApiMockImpl 를 새로 또 만드는지 궁금합니다.

  2. 만약 CommunityRemoteDataSourceApiImpl(DioMock()) 로 주입을 받는 식이라면

    Response<dynamic> response = await _dio.get('get/community/path');
        final responseDto = CommunityResponseDTO.fromJson(response.data);

    해당 코드들이 Dio() 일 때, DioMock() 일 때 달라야 할 것 같은데 어떻게 처리하는 것이 맞는지 궁금합니다.

 

감사합니다.

 

 

flutter mvvm provider 클린-아키텍처 dependency

답변 1

0

오준석

두 방법 모두 가능합니다.

첫 번째 방법인 생성자 주입 방식은 Dio 객체를 Mocking 하는 것이고, 두 번째 방법은 리턴하는 데이터를 Mocking 하는 것으로 미묘한 차이가 있겠으나 목적은 같기 때문에 원하는 방식을 취하시면 됩니다.

생성자 주입의 경우에 Mockito 를 적용하여 Dio 객체의 메소드 동작을 Mocking 하거나, Dio 에서 별도의 Mocking 된 객체를 제공한다면 그것을 활용하는 방법이 있습니다.

찾아본 결과 Dio 는 별도의 Mocking 된 객체 제공을 하지 않고 있습니다. Mockito를 활용하거나, 다음 패키지를 통해서도 Mocking을 할 수가 있는 듯 하니 참고하시기 바랍니다.

https://pub.dev/packages/http_mock_adapter

 

1

김보겸

감사합니다.

vscode or 안드로이드 디바이스가 아닌 웹으로 실행했을때..

0

23

2

성능 분석 툴 공유

1

38

2

146 자료는 학습완료가 체크가 안돼요

0

33

1

'플러터 개발환경 세팅하기' 링크 클릭시, 악성 스크립트 설치 유도 페이지로 이동하니 조심하시길 바랍니다.

0

63

2

[강의 문의] '앱 출시하기' 강의 추가 일정 관련하여 문의드립니다.

0

40

1

안드로이드 기기 실행 오류

0

60

2

수강연장 가능할까요...

0

58

2

플러터 세팅 후 새폴더 생성건

0

55

2

강의에서 사용된 안드로이드 스튜디오 버전을 알고싶어요.

0

62

2

강의 자료는 어디있나요?

0

40

1

이미지 업로드해도 프로필에 x만 떠요

0

63

3

cursor ai가 업데이트 되서 ui가 바뀌었는데 반영은 안될까요?

0

75

2

마스크 json url이 안보여서 공유합니다

0

93

1

DI 에 대해 문의 좀 드립니다.

0

137

2

Bad state 에러

0

214

1

여러 화면 di강의는 언제 나올 예정인가요?

0

203

1

Riverpod 프로바이더에 의존성 주입

0

969

1

go router 의존성

0

308

1

객체가 아닌 일반 변수의 get it

0

298

1

뷰 모델 분리하기

0

360

1

네트워크 통신 에러 처리

0

348

1

데이터 추상화 문제

0

350

2

로그인(auth)관련 데이터 흐름

0

276

1

소스코드 공유

0

450

1