[flutter] Injectable을 사용하여 플러터 앱의 테스트 케이스 작성 효율화하기

테스트 케이스 작성은 신뢰성 있는 플러터 앱을 개발하는 데 중요한 역할을 합니다. 그러나 많은 종속성이 있는 프로젝트에서 테스트 케이스를 작성하려면 종속성을 관리하는 것이 어려울 수 있습니다. 이러한 문제를 해결하기 위해 Injectable을 사용하여 종속성 관리를 효율화할 수 있습니다.

Injectable이란?

Injectable은 플러터 프레임워크에서 제공하는 라이브러리로, 종속성 주입(Dependency Injection)을 쉽게 구현할 수 있게 해줍니다. 종속성 주입은 객체 사이의 의존성을 외부에서 관리하고 주입해줌으로써 유연하고 확장 가능한 코드를 작성할 수 있게 합니다.

테스트 케이스 작성 효율화를 위한 Injectable 사용법

아래는 Injectable을 사용하여 플러터 앱의 테스트 케이스를 작성하는 방법입니다.

  1. 먼저 injectable 패키지를 pubspec.yaml에 추가합니다.
dependencies:
  injectable: <version>
  1. main.dart 파일에서 setupDependencyInjection 함수를 호출하여 종속성을 설정합니다.
void main() {
  setupDependencyInjection();
  runApp(MyApp());
}
  1. 종속성이 필요한 클래스에 @injectable 어노테이션을 추가합니다.
@injectable
class UserRepository {
  // ...
}
  1. 종속성을 사용하는 클래스에서 @lazySingleton 어노테이션을 사용하여 싱글톤 객체로 설정합니다.
@injectable
@lazySingleton
class AuthService {
  final UserRepository _userRepository;

  AuthService(this._userRepository);
  // ...
}
  1. 테스트 케이스 작성 시에는 @TestInjector 어노테이션을 붙여 테스트 용도로만 사용되는 종속성을 제공합니다.
@TestInjector(as: UserRepository)
class MockUserRepository implements UserRepository {
  // ...
}
  1. 테스트 케이스에서는 getIt.get() 메서드를 사용하여 테스트 목적에 맞는 종속성을 가져와 사용합니다.
void main() {
  group('AuthService Tests', () {
    setUpAll(() {
      getIt.reset(); // 테스트 단위마다 종속성을 초기화합니다.
      getIt.registerSingleton<UserRepository>(MockUserRepository());
    });

    test('should login', () {
      final authService = getIt.get<AuthService>();
      // ...
    });

    // ...
  });
}

결론

Injectable을 사용하여 테스트 케이스 작성 효율화는 플러터 앱의 개발과 유지 보수를 편리하게 할 수 있습니다. 종속성 주입을 통해 코드의 의존성을 외부로부터 관리하고 테스트에 필요한 종속성을 쉽게 제공할 수 있습니다. 이를 통해 더 견고하고 확장 가능한 테스트 케이스를 구현할 수 있습니다.

참고 자료