[flutter] Injectable 클래스를 이용한 플러터 앱의 테스트 코드 작성 방법

플러터(Flutter)는 동적이고 아름다운 사용자 인터페이스를 만들기 위한 프레임워크입니다. 플러터 앱을 개발할 때, 테스트 코드를 작성하여 앱의 동작을 확인하는 것은 매우 중요합니다. 이때 Injectable 클래스를 사용하면 의존성 주입을 통해 테스트 코드 작성을 더욱 편리하게 할 수 있습니다.

1. Injectable 클래스란?

Injectable 클래스는 플러터 앱에서 의존성 주입을 처리하는 라이브러리입니다. 의존성 주입은 앱의 각 클래스 간의 의존 관계를 명시적으로 지정하여 앱의 유지 보수성을 향상시키는 방법입니다. Injectable을 사용하면 테스트 코드 작성 시 의존성을 쉽게 전환하거나 목(mock) 객체를 사용할 수 있습니다.

2. 테스트 코드 작성 방법

Injectable 클래스를 사용하여 테스트 코드를 작성하는 방법은 다음과 같습니다:

2.1. 의존성 주입 설정

먼저, 테스트 코드에서 사용할 의존성을 주입할 클래스를 Injectable 어노테이션으로 표시합니다. 예를 들어, 다음은 AuthService를 주입 가능한 클래스로 만들어주는 코드입니다:

@Injectable(as: AuthService)
class MockAuthService implements AuthService {
  // Mock implementation
}

2.2. 테스트 코드 작성

테스트 코드에서는 Injectable 클래스에 주입된 의존성 객체를 사용하여 앱의 동작을 검증할 수 있습니다. 예를 들어, AuthService를 사용하는 LoginPage의 테스트 코드를 작성해 보겠습니다:

void main() {
  late AuthService authService;
  late LoginPage loginPage;

  setUp(() {
    authService = getIt<AuthService>(); // getIt을 통해 주입된 객체를 가져옵니다
    loginPage = LoginPage(authService: authService);
  });

  test('로그인 버튼 클릭 시 로그인이 진행되어야 함', () {
    // 로그인 버튼 클릭 시 동작을 검증하는 코드
  });
  
  test('비밀번호 재설정 버튼 클릭 시 비밀번호 재설정 창이 뜨는지 확인', () {
    // 비밀번호 재설정 버튼 클릭 시 동작을 검증하는 코드
  });
}

위 코드에서는 setUp 함수를 사용하여 테스트 실행 전에 필요한 객체를 초기화합니다. getIt 함수를 사용하여 Injectable 클래스에 주입된 AuthService 객체를 가져옵니다.

2.3. 테스트 실행

테스트를 실행하려면 다음과 같은 명령어를 실행합니다:

flutter test

위 명령어를 실행하면 테스트 결과가 출력됩니다. 실패한 테스트 케이스가 있을 경우 해당하는 실패 원인을 분석하여 수정할 수 있습니다.

3. 참고 자료

위에서 설명한 Injectable 클래스를 사용하여 테스트 코드를 작성하면 플러터 앱의 동작을 쉽게 확인할 수 있습니다. Injectable은 테스트 주도 개발(TDD) 등의 방법론을 적용할 때 특히 유용하며, 앱의 코드 품질과 유지 보수성을 크게 향상시킬 수 있습니다.