[flutter] get_it를 사용하여 테스트 코드를 작성할 때 주의해야 할 점은?

get_it은 의존성 주입(Dependency Injection) 라이브러리로, Flutter 애플리케이션에서 의존성 관리를 쉽게할 수 있게 도와줍니다. 하지만 테스트 코드를 작성할 때 몇 가지 주의해야 할 사항이 있습니다.

  1. init 메서드 호출: get_it을 사용하기 전에 반드시 WidgetsFlutterBinding.ensureInitialized() 메서드를 호출하여 애플리케이션을 초기화해야합니다. 그리고 get_it.init() 메서드를 호출하여 get_it을 초기화해야합니다. 이는 테스트 환경에서 get_it이 제대로 동작하도록 하는 중요한 단계입니다.

  2. 테스트 환경에서 레지스트리 초기화: 각각의 테스트 메서드에서 get_it 레지스트리를 초기화해야합니다. 이를 통해 테스트 케이스 간의 의존성 충돌을 방지할 수 있습니다. 일반적으로 setUp 메서드를 사용하여 각 테스트 케이스 이전에 get_it 레지스트리를 초기화하는 것이 좋습니다.

  3. Mock 객체 사용: 테스트 환경에서 get_it을 사용할 때, 외부 의존성을 대체하기 위해 Mock 객체를 사용하는 것이 일반적입니다. Mock 객체를 사용하여 테스트 케이스를 작성하고, 목 객체를 get_it에 등록하여 테스트 중에 원하는 동작을 시뮬레이션할 수 있습니다.

Example Code

import 'package:flutter_test/flutter_test.dart';
import 'package:get_it/get_it.dart';
import 'package:mockito/mockito.dart';
import 'package:my_app/my_service.dart';
import 'package:my_app/my_widget.dart';

class MockMyService extends Mock implements MyService {}

void main() {
  // Mock 객체 생성
  MockMyService mockService;
  
  setUp(() {
    // get_it 초기화
    WidgetsFlutterBinding.ensureInitialized();
    GetIt.I.init();
    
    // Mock 객체 등록
    mockService = MockMyService();
    GetIt.I.registerSingleton<MyService>(mockService);
  });
  
  tearDown(() {
    // 테스트 종료 후 get_it 레지스트리 초기화
    GetIt.I.reset();
  });
  
  testWidgets('MyWidget shows loading when data is null', (WidgetTester tester) async {
    // Mock 객체의 동작 설정
    when(mockService.getData()).thenAnswer((_) => Future.value(null));
    
    // MyWidget 테스트
    await tester.pumpWidget(MyWidget());
    
    // 특정 위젯이 로딩 상태를 올바르게 표시하는지 확인하는 코드 작성
  });
  
  testWidgets('MyWidget shows data when available', (WidgetTester tester) async {
    // Mock 객체의 동작 설정
    when(mockService.getData()).thenAnswer((_) => Future.value('Mock Data'));
    
    // MyWidget 테스트
    await tester.pumpWidget(MyWidget());
    
    // 특정 위젯이 데이터를 올바르게 표시하는지 확인하는 코드 작성
  });
}

위와 같이 get_it을 사용하여 테스트 코드를 작성할 때 위의 세 가지 주의사항을 지키면서 진행하면 원활하게 테스트를 수행할 수 있습니다.

더 자세한 내용은 get_it의 공식 문서를 참고하십시오: https://pub.dev/packages/get_it