[flutter] get_it를 사용하여 모의 객체를 주입하고 테스트하는 방법은?

소개

get_it는 의존성 주입(Dependency Injection)을 관리하기 위한 편리한 패키지입니다. 이를 사용하면 앱의 여러 부분에서 동일한 인스턴스를 사용하거나 모의 객체를 주입하여 테스트할 수 있습니다. 이 글에서는 get_it를 사용하여 모의 객체를 주입하고 테스트하는 방법에 대해 알아보겠습니다.

get_it 패키지 설치

먼저, get_it 패키지를 사용하기 위해 pubspec.yaml 파일에 다음 의존성을 추가해야 합니다.

dependencies:
  get_it: ^x.x.x

여기서 x.x.x는 원하는 get_it 패키지의 버전을 의미합니다. 버전을 지정하지 않으면 최신 버전이 설치됩니다. 패키지를 추가한 후에는 flutter packages get 명령을 실행하여 패키지를 다운로드하십시오.

get_it를 사용하여 인스턴스 등록

의존성을 주입하기 위해 get_it를 사용하기 시작하려면 사용할 클래스를 get_it에 등록해야 합니다. 아래의 예제와 같이 main.dart 파일에 인스턴스를 등록할 수 있습니다.

import 'package:get_it/get_it.dart';

GetIt locator = GetIt.instance;

void main() {
  locator.registerSingleton<ApiService>(ApiService());
  
  // 앱 실행
  runApp(MyApp());
}

위의 예제에서는 locator라는 인스턴스를 생성하고, registerSingleton 메서드를 사용하여 ApiService 클래스의 인스턴스를 등록합니다. 이렇게하면 앱 전체에서 동일한 인스턴스를 사용할 수 있습니다.

모의 객체 등록

테스트를 위해 모의 객체를 주입하려면 모의 객체를 등록해야 합니다. 모의 객체 등록은 실제 클래스가 아닌 모의 클래스를 사용하도록 어플리케이션을 구성합니다. 모의 객체를 등록하는 방법은 실제 객체를 등록하는 것과 동일합니다. 다음은 모의 객체를 등록하는 예제입니다.

// 모의 객체 클래스
class MockApiService extends Mock implements ApiService {}

void main() {
  locator.registerSingleton<ApiService>(MockApiService());
  
  // 테스트 실행
  runApp(MyApp());
}

위의 예제에서는 MockApiService라는 모의 객체 클래스를 정의하고, registerSingleton 메서드를 사용하여 이를 등록합니다. 이제 앱이 실행될 때 모의 객체가 실제 객체 대신 주입됩니다.

테스트 코드 작성

이제 get_it를 사용하여 모의 객체가 주입되는 앱에서 테스트 코드를 작성할 수 있습니다. get_it를 사용하지 않는 경우와 동일하게 테스트 코드를 작성하면 됩니다. 모의 객체가 주입된 상태에서 테스트가 수행됩니다.

void main() {
  test('API 테스트', () {
    // 모의 객체 사용
    final apiService = locator<ApiService>();
    final result = apiService.getData();
    
    // 테스트 검증
    expect(result, 'Test Data');
  });
}

위의 예제에서는 locator<ApiService>()를 사용하여 모의 객체를 가져옵니다. 그리고 모의 객체의 메서드를 호출하여 원하는 결과를 얻을 수 있습니다. 테스트 검증은 get_it를 사용하지 않는 경우와 동일하게 수행됩니다.

결론

이 글에서는 get_it를 사용하여 모의 객체를 주입하고 테스트하는 방법에 대해 알아보았습니다. get_it를 사용하여 앱의 의존성 관리를 효율적으로 처리하고 모의 객체를 쉽게 주입하여 테스트하는 것은 앱 개발의 생산성을 향상시키는 데 도움이 됩니다. get_it의 강력한 기능을 사용하여 앱을 더 견고하게 만들어보세요.

참고 자료