[flutter] get_it를 사용하여 테스트 시나리오에서 다른 객체를 주입하는 방법은?

get_it은 의존성 주입(Dependency Injection)을 처리하기 위한 Flutter 패키지입니다. 이 패키지를 사용하면 애플리케이션 전반에서 객체를 주입하고 사용할 수 있습니다. 이 방법을 사용하면 테스트 시나리오에서 다른 객체를 주입할 수 있습니다.

다음은 get_it를 사용하여 테스트 시나리오에서 다른 객체를 주입하는 방법입니다:

  1. 먼저, get_it 패키지의 종속성을 추가해야 합니다. pubspec.yaml 파일에 다음 코드를 추가하세요:

    dependencies:
      get_it: ^7.0.0
    

    종속성을 추가한 후, 터미널에서 flutter packages get 명령을 실행하여 종속성을 가져옵니다.

  2. get_it 패키지를 사용하여 주입할 객체를 등록해야 합니다. 일반적으로 main() 함수 내에서 get_it을 초기화하는 것이 일반적입니다. 다음은 예시 코드입니다:

    import 'package:flutter/material.dart';
    import 'package:get_it/get_it.dart';
    
    void main() {
      GetIt.I.registerSingleton<MyService>(MyService());
      runApp(MyApp());
    }
    

    위의 코드에서 MyService라는 객체를 registerSingleton() 메서드를 사용하여 등록하고 있습니다.

  3. 이제 MyService 객체를 주입할 수 있습니다. 다음은 예시 코드입니다:

    import 'package:flutter/material.dart';
    import 'package:get_it/get_it.dart';
    
    class MyWidget extends StatelessWidget {
      final MyService myService = GetIt.I<MyService>();
    
      @override
      Widget build(BuildContext context) {
        // ...
      }
    }
    

    위의 코드에서 GetIt.I<MyService>()를 사용하여 MyService 객체를 주입하고 있습니다. 이제 MyWidget 내에서 myService 변수를 사용할 수 있습니다.

  4. 테스트 시나리오에서는 MyService 객체를 대체하기 위해 다른 객체를 주입해야 합니다. 이를 위해 테스트 코드 내에서 get_it 패키지를 사용하여 MyService 객체를 등록하고 대체 객체를 주입할 수 있습니다. 다음은 예시 코드입니다:

    import 'package:flutter_test/flutter_test.dart';
    import 'package:get_it/get_it.dart';
    import 'package:my_app/my_service.dart';
    
    void main() {
      group('MyWidget', () {
        setUp(() {
          GetIt.I.registerSingleton<MyService>(MyReplacementService());
        });
    
        tearDown(() {
          GetIt.I.unregister<MyService>();
        });
    
        testWidgets('Should display the correct text', (WidgetTester tester) async {
          // ...
        });
      });
    }
    

    위의 코드에서 MyReplacementService를 사용하여 MyService 객체를 대체하고 있습니다. setUp() 함수에서 MyReplacementService를 등록하고, tearDown() 함수에서 MyService 객체를 등록 해제하고 있습니다.

이제 get_it를 사용하여 테스트 시나리오에서 다른 객체를 주입할 수 있습니다. 이를 통해 다양한 시나리오에서 테스트를 수행하고 애플리케이션의 의존성을 유연하게 관리할 수 있습니다.

참고 문서: