소개
플러터는 구글에서 개발한 모바일 애플리케이션 개발 프레임워크로, 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 공식 문서를 참고하시기 바랍니다.