SonarQube 및 Flutter를 사용한 CI - 1부

안녕하세요 여러분, 이것은 제 첫 번째 기사이므로 어떻게 하면 나아질 수 있는지 자유롭게 의견을 주시면 감사하겠습니다.

이 기사에서는 SonarQube 도구를 Flutter 프레임워크와 함께 사용하여 코드 품질을 개선하는 방법을 보여주고 이를 위해 사용할 버전을 설명하겠습니다.
  • Flutter: 3.0.1, 안정 버전
  • SonarQube: 8.9.5, 커뮤니티 에디션
  • 도커 데스크톱: 4.9.0

  • Flutter는 모바일에서 데스크톱, 심지어 내장형 장치에 이르기까지 거의 모든 일반 플랫폼에서 컴파일되고 실행되는 Google에서 만든 프레임워크이므로 이것이 출발점이 될 것입니다. 시간이 흐르고 앱이 특정 요구 사항에 맞아야 하므로 이를 염두에 두고 테스트는 코드가 설계한대로 작동하는지 이해하는 좋은 방법입니다. 기본적으로 Flutter에는 세 가지 유형의 테스트가 있습니다.
  • 단위 테스트: 첫 번째 테스트는 수행할 변수와 함수가 있으므로 코드의 최소 부분을 테스트하는 데 사용됩니다. 팁: 항상 단일 책임으로만 기능을 유지하려고 노력하십시오. 이렇게 하면 코드가 깨끗하고 테스트 가능해집니다.
  • 위젯 테스트: 이름에서 알 수 있듯이 이러한 종류의 테스트는 위젯이 사용자에게 올바르게 표시되는지 피드백을 제공합니다.
  • 통합 테스트: 마지막 테스트는 모듈과 같은 더 많은 코드를 다루기 위한 일련의 지침을 사용하여 앱과 실제 상호 작용을 수행하는 데 사용됩니다.

  • 계속해서 다음 명령을 사용하여 새 Flutter 프로젝트를 만들어야 합니다. flutter create project_name 여기서 project_name에서 프로젝트에 이름을 지정할 수 있습니다.

    완료되면 다음과 같은 내용이 표시됩니다.

    `

    All done!
    In order to run your application, type:
    
      $ cd project_name
      $ flutter run
    
    Your application code is in project_name/lib/main.dart.
    


    Visual Studio 코드를 사용하는 경우 cd project_name를 입력한 다음 code .를 입력하십시오.

    처음에 프로젝트 구조에는 아래에서 볼 수 있는 것과 같은 간단한 카운터 앱과 위젯 테스트가 함께 제공됩니다.
    lib/main.dart
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: const MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({Key? key, required this.title}) : super(key: key);
    
      final String title;
    
      @override
      State<MyHomePage> 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>[
                const Text(
                  'You have pushed the button this many times:',
                ),
                Text(
                  '$_counter',
                  style: Theme.of(context).textTheme.headline4,
                ),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: const Icon(Icons.add),
          ),
        );
      }
    }
    

    test/widget_test.dart
    // This is a basic Flutter widget test.
    //
    // To perform an interaction with a widget in your test, use the WidgetTester
    // utility in the flutter_test package. For example, you can send tap and scroll
    // gestures. You can also use WidgetTester to find child widgets in the widget
    // tree, read text, and verify that the values of widget properties are correct.
    
    import 'package:flutter/material.dart';
    import 'package:flutter_test/flutter_test.dart';
    
    import 'package:project_name/main.dart';
    
    void main() {
      testWidgets('Counter increments smoke test', (WidgetTester tester) async {
        // Build our app and trigger a frame.
        await tester.pumpWidget(const MyApp());
    
        // Verify that our counter starts at 0.
        expect(find.text('0'), findsOneWidget);
        expect(find.text('1'), findsNothing);
    
        // Tap the '+' icon and trigger a frame.
        await tester.tap(find.byIcon(Icons.add));
        await tester.pump();
    
        // Verify that our counter has incremented.
        expect(find.text('0'), findsNothing);
        expect(find.text('1'), findsOneWidget);
      });
    }
    
    


    프로젝트가 생성되면 다음 부분에서는 OS에 따라 Docker Desktop을 다운로드한 다음 SonarQube website으로 이동하여 소프트웨어를 다운로드하는 방법을 알아봅니다. 이를 염두에 두고 첫 번째 부분을 즐기시기 바라며 다음 부분에서 뵙기를 기대합니다.

    좋은 웹페이지 즐겨찾기