[flutter] 플러터(Flutter)의 라이브러리(Flutter Hooks)를 사용하면 테스트 작성이 용이해지나요?

플러터(Flutter) 앱 개발에서 테스트는 매우 중요합니다. 테스트는 앱의 안정성과 기능을 보장하기 위해 필수적으로 수행되어야 합니다. 그러나 일반적으로 플러터의 위젯 테스트는 번거롭고 복잡한 과정을 거쳐야 합니다.

이때, Flutter Hooks 라이브러리를 사용하면 위젯 테스트 작성이 훨씬 용이해집니다. Flutter Hooks는 플러터의 위젯 상태 관리와 이벤트 처리를 간편하게 할 수 있는 라이브러리입니다. 이 라이브러리는 리액트 훅과 비슷한 개념을 도입하여 플러터 위젯에 상태와 생명주기를 추가할 수 있습니다.

Flutter Hooks를 사용하면 테스트 코드에서 위젯 상태를 간편하게 관리할 수 있습니다. 예를 들어, 간단한 카운터 앱을 테스트해보겠습니다.

import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';

class Counter extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final count = useState(0);

    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Count: ${count.value}'),
              RaisedButton(
                child: Text('Increment'),
                onPressed: () => count.value++,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

void main() {
  testWidgets('Counter increments test', (WidgetTester tester) async {
    await tester.pumpWidget(Counter());

    expect(find.text('Count: 0'), findsOneWidget);
    expect(find.text('Count: 1'), findsNothing);

    await tester.tap(find.byType(RaisedButton));
    await tester.pump();

    expect(find.text('Count: 0'), findsNothing);
    expect(find.text('Count: 1'), findsOneWidget);
  });
}

위 코드에서는 Counter 위젯과 해당 위젯을 테스트하기 위한 testWidgets 함수가 정의되어 있습니다. Counter 위젯은 useState 훅을 사용하여 상태를 관리하며, RaisedButton을 누르면 count 값이 1씩 증가합니다.

테스트는 위젯을 렌더링한 후 위젯 트리에서 특정 위젯을 찾고 해당 위젯의 속성을 검사하는 방식으로 이루어집니다. 예를 들어, expect(find.text('Count: 0'), findsOneWidget) 코드는 ‘Count: 0’을 텍스트로 가지는 위젯을 찾아야 한다는 테스트를 의미합니다.

Flutter Hooks를 사용하면 useState 훅을 사용하여 위젯 상태를 변경할 수 있으므로, 위젯 상태 변화를 간단하게 테스트할 수 있습니다. 위 코드에서는 RaisedButton을 탭한 후 테스트가 정상적으로 통과되는지 검사하고 있습니다.

따라서, Flutter Hooks 라이브러리를 사용하면 위젯 테스트 작성이 더욱 쉬워지며, 앱의 안정성과 기능을 보장하는 데 도움이 됩니다.

참고 자료