[flutter] Injectable을 사용하여 플러터 앱의 테스트 케이스 작성 효율화하기
테스트 케이스 작성은 신뢰성 있는 플러터 앱을 개발하는 데 중요한 역할을 합니다. 그러나 많은 종속성이 있는 프로젝트에서 테스트 케이스를 작성하려면 종속성을 관리하는 것이 어려울 수 있습니다. 이러한 문제를 해결하기 위해 Injectable을 사용하여 종속성 관리를 효율화할 수 있습니다.
Injectable이란?
Injectable은 플러터 프레임워크에서 제공하는 라이브러리로, 종속성 주입(Dependency Injection)을 쉽게 구현할 수 있게 해줍니다. 종속성 주입은 객체 사이의 의존성을 외부에서 관리하고 주입해줌으로써 유연하고 확장 가능한 코드를 작성할 수 있게 합니다.
테스트 케이스 작성 효율화를 위한 Injectable 사용법
아래는 Injectable을 사용하여 플러터 앱의 테스트 케이스를 작성하는 방법입니다.
- 먼저
injectable
패키지를pubspec.yaml
에 추가합니다.
dependencies:
injectable: <version>
main.dart
파일에서setupDependencyInjection
함수를 호출하여 종속성을 설정합니다.
void main() {
setupDependencyInjection();
runApp(MyApp());
}
- 종속성이 필요한 클래스에
@injectable
어노테이션을 추가합니다.
@injectable
class UserRepository {
// ...
}
- 종속성을 사용하는 클래스에서
@lazySingleton
어노테이션을 사용하여 싱글톤 객체로 설정합니다.
@injectable
@lazySingleton
class AuthService {
final UserRepository _userRepository;
AuthService(this._userRepository);
// ...
}
- 테스트 케이스 작성 시에는
@TestInjector
어노테이션을 붙여 테스트 용도로만 사용되는 종속성을 제공합니다.
@TestInjector(as: UserRepository)
class MockUserRepository implements UserRepository {
// ...
}
- 테스트 케이스에서는
getIt.get()
메서드를 사용하여 테스트 목적에 맞는 종속성을 가져와 사용합니다.
void main() {
group('AuthService Tests', () {
setUpAll(() {
getIt.reset(); // 테스트 단위마다 종속성을 초기화합니다.
getIt.registerSingleton<UserRepository>(MockUserRepository());
});
test('should login', () {
final authService = getIt.get<AuthService>();
// ...
});
// ...
});
}
결론
Injectable을 사용하여 테스트 케이스 작성 효율화는 플러터 앱의 개발과 유지 보수를 편리하게 할 수 있습니다. 종속성 주입을 통해 코드의 의존성을 외부로부터 관리하고 테스트에 필요한 종속성을 쉽게 제공할 수 있습니다. 이를 통해 더 견고하고 확장 가능한 테스트 케이스를 구현할 수 있습니다.