Flutter의 통합 테스트 소개

전제



· Flutter 도입 완료
· 통합 테스트를 한 적이 없다.

할 일



공식으로 샘플이 있으므로 그것을 보고 진행하겠습니다!


  • 테스트를 위한 앱 만들기
  • dependency에 flutter_driver 추가
  • 테스트 파일 만들기
  • 테스트를위한 앱 파일 작성
  • 테스트 작성
  • 테스트 실행

  • 1. 테스트를 위한 앱 만들기







    counter_app/lib/main.dart
    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Counter App',
          home: MyHomePage(title: 'Counter App Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      int _counter = 0;
    
      void _incrementCounter() {
        setState(() {
          _counter++;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'You have pushed the button this many times:',
                ),
                Text(
                  '$_counter',
                  // Provide a Key to this specific Text widget. This allows
                  // identifing the widget from inside the test suite,
                  // and reading the text.
                  key: Key('counter'),
                  style: Theme.of(context).textTheme.display1,
                ),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            // Provide a Key to this button. This allows finding this
            // specific button inside the test suite, and tapping it.
            key: Key('increment'),
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
        );
      }
    }
    

    실행하면 이런 느낌


    2. dependency에 flutter_driver 추가



    아래 변경을 한 후에 Packages get 실행

    counter_app/pubspec.yaml
      dev_dependencies:
        flutter_test:
          sdk: flutter
    ++  flutter_driver:
    ++    sdk: flutter
    ++  test: any
    

    3. 테스트 파일 만들기


      counter_app/
        lib/
          main.dart
    ++  test_driver/
    ++    app.dart
    ++    app_test.dart
    

    4. 테스트를 위한 앱 파일 작성



    counter_app/test_driver/app.dart
    import 'package:flutter_driver/driver_extension.dart';
    import 'package:counter_app/main.dart' as app;
    
    void main() {
      // This line enables the extension.
      enableFlutterDriverExtension();
    
      // Call the `main()` function of the app, or call `runApp` with
      // any widget you are interested in testing.
      app.main();
    }
    

    5. 테스트 작성



    counter_app/test_driver/app_test.dart
    // Imports the Flutter Driver API.
    import 'package:flutter_driver/flutter_driver.dart';
    import 'package:test/test.dart';
    
    void main() {
      group('Counter App', () {
        // First, define the Finders and use them to locate widgets from the
        // test suite. Note: the Strings provided to the `byValueKey` method must
        // be the same as the Strings we used for the Keys in step 1.
        final counterTextFinder = find.byValueKey('counter');
        final buttonFinder = find.byValueKey('increment');
    
        FlutterDriver driver;
    
        // Connect to the Flutter driver before running any tests.
        setUpAll(() async {
          driver = await FlutterDriver.connect();
        });
    
        // Close the connection to the driver after the tests have completed.
        tearDownAll(() async {
          if (driver != null) {
            driver.close();
          }
        });
    
        test('starts at 0', () async {
          // Use the `driver.getText` method to verify the counter starts at 0.
          expect(await driver.getText(counterTextFinder), "0");
        });
    
        test('increments the counter', () async {
          // First, tap the button.
          await driver.tap(buttonFinder);
    
          // Then, verify the counter text is incremented by 1.
          expect(await driver.getText(counterTextFinder), "1");
        });
      });
    }
    

    6. 테스트 실행



    iOS 시뮬레이터 또는 Android 에뮬레이터를 시작합니다.
    AndroidStudio Terminal에 다음 명령을 붙여 실행!
    flutter drive --target=test_driver/app.dart
    



    그러면 다음에 테스트가 실행되고 다음과 같이 표시됩니다.


    보충



    나중에 추가하겠습니다 w

    좋은 웹페이지 즐겨찾기