[flutter] Injectable을 사용한 플러터 앱의 테스트 자동화 방법

플러터는 Google에서 개발한 UI 프레임워크로, 크로스 플랫폼 앱 개발에 사용됩니다. 앱의 테스트 자동화는 앱의 품질 향상을 위해 매우 중요합니다. 이러한 자동화 테스트를 수행하기 위해 Flutter에서는 다양한 패키지와 라이브러리를 제공합니다. 이번 기사에서는 “injectable” 패키지를 사용하여 플러터 앱의 테스트 자동화 방법을 알아보겠습니다.

1. injectable 패키지란?

injectable은 플러터 앱에서 의존성 주입을 위한 패키지입니다. 이 패키지를 사용하면 앱의 의존성 관리를 더욱 효과적으로 할 수 있습니다. 의존성 주입은 코드의 유연성, 재사용성 및 테스트 가능성을 향상시키는 데 도움이 됩니다. injectable은 코드의 의존성을 관리하고 앱의 다른 부분에 주입하는 것을 도와줍니다.

2. injectable 패키지 설치

dependencies:
  injectable: ^1.1.0
  get_it: ^7.0.0

yaml 파일의 dependencies 섹션에 위의 패키지들을 추가해줍니다. 그리고 flutter packages get을 실행하여 패키지를 설치합니다.

3. injectable 사용 방법

  1. 우선, main.dart 파일에서 injectable 패키지를 import 하고, configureInjection() 메서드를 호출하여 주입을 설정합니다.
import 'package:injectable/injectable.dart';

void main() {
  configureInjection();
  runApp(MyApp());
}
  1. 의존성 주입을 설정할 파일을 생성합니다. 예를 들어, di_config.dart 파일을 생성하고 아래와 같이 작성합니다.
import 'package:injectable/injectable.dart';
import 'package:get_it/get_it.dart';

@injectableInit
void configureInjection() {
  GetIt.instance.registerSingleton<MyService>(MyServiceImpl());
}
  1. 테스트를 수행할 파일에서 @LazySingleton() 어노테이션을 사용하여 해당 서비스 클래스에 주입을 설정합니다.
@LazySingleton(as: MyService)
class MockMyService extends Mock implements MyService {}

void main() {
  configureInjection(Environment.test);

  final service = GetIt.instance<MyService>();
  final mockService = MockMyService();

  when(mockService.someMethod()).thenReturn('Mock Value');

  group('MyService', () {
    test('Some Method Test', () {
      expect(service.someMethod(), 'Mock Value');
    });
  });
}

위 코드에서는 MockMyService를 생성하고, someMethod()를 호출할 때 ‘Mock Value’를 반환하도록 설정했습니다. 그리고 테스트 그룹을 만들어 정상적인 동작을 확인할 수 있는지 테스트합니다.

정리

이를 통해 injectable 패키지를 사용하여 플러터 앱의 의존성 주입과 테스트 자동화를 설정하는 방법을 알아보았습니다. 의존성 주입을 통해 앱의 유지보수성, 테스트 가능성 및 품질 향상을 달성할 수 있으므로, 향후 프로젝트에서 활용해보시기 바랍니다.