[flutter] Injectable을 사용하여 플러터 앱의 로직 단위 테스트하기

소개

플러터는 구글에서 개발한 모바일 애플리케이션 개발 프레임워크로, Dart 언어를 기반으로 작동합니다. 플러터를 사용하면 하나의 코드베이스로 안드로이드와 iOS 앱을 모두 개발할 수 있습니다.

로직 단위 테스트는 애플리케이션의 비즈니스 로직을 독립적으로 테스트하는 것을 의미합니다. 이는 앱의 안정성과 기능을 검증하는 중요한 단계입니다. Injectable은 플러터에서 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 이번 블로그 포스트에서는 Injectable을 사용하여 플러터 앱의 로직 단위 테스트를 어떻게 수행할 수 있는지 알아보겠습니다.

로직 단위 테스트를 위한 Injectable 설정하기

Injectable을 사용하려면, injectable 어노테이션과 @module 어노테이션을 사용하여 의존성을 주입할 클래스를 정의해야 합니다. 이 클래스는 @singleton 또는 @lazySingleton 어노테이션으로 마킹하여 싱글톤으로 만들 수 있습니다.

// app_module.dart
import 'package:injectable/injectable.dart';

@module
abstract class AppModule {
  @singleton
  MyService provideMyService() => MyService();
}

위의 코드에서는 MyService 클래스를 싱글톤으로 등록한 후, provideMyService 메서드를 통해 해당 클래스를 제공하고 있습니다.

Injectable을 사용하면 테스트 환경에서는 주입된 의존성을 치환할 수 있습니다. 이를 위해 @test 어노테이션으로 마킹된 클래스를 정의하고, @lazySingleton 어노테이션으로 마킹된 의존성을 제공할 수 있습니다. 예를 들어:

// test_module.dart
import 'package:injectable/injectable.dart';

@test
@module
abstract class TestModule {
  @lazySingleton
  MockMyService provideMyService() => MockMyService();
}

위의 코드에서는 MyService 클래스를 대체하기 위해 MockMyService 클래스를 제공하고 있습니다. 테스트 환경에서는 MockMyService가 주입되어 비즈니스 로직의 테스트를 수행할 수 있습니다.

로직 단위 테스트하기

의존성 주입을 통해 로직 단위 테스트를 수행하기 위해서는 테스트 파일에서 Injectable을 사용하여 의존성을 주입해야 합니다.

// my_logic_test.dart
import 'package:injectable/injectable.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:my_app/app_module.dart';

void main() {
  // 의존성 주입 설정
  configureInjection(AppModule());

  test('Test my logic', () {
    // 주입된 의존성을 이용하여 로직 테스트
    final service = getIt<MyService>();
    final result = service.myLogic();
    expect(result, equals(expectedResult));
  });
}

위의 코드에서는 configureInjection 메서드를 사용하여 의존성을 주입하고, getIt 메서드를 사용하여 주입된 의존성을 가져옵니다. 그 후 해당 의존성을 이용하여 비즈니스 로직을 테스트합니다.

결론

이번 포스트에서는 Injectable을 사용하여 플러터 앱의 로직 단위 테스트를 수행하는 방법을 알아보았습니다. Injectable은 의존성 주입을 쉽게 구현할 수 있도록 도와주는 강력한 라이브러리입니다. 로직 단위 테스트를 통해 앱의 안정성을 확보하고, 버그를 미리 발견할 수 있습니다.

더 자세한 내용은 Injectable 공식 문서를 참고하시기 바랍니다.