Community코딩 & 개발github.com

photoeven2-netizen/astronusa

coverage 패키지를 사용해 테스트 커버리지를 수집하고 LCOV 보고서를 생성합니다.

astronusa란 무엇인가요?

이 스킬은 Dart 및 Flutter 프로젝트에서 테스트 커버리지를 수집하고 LCOV 형식의 보고서를 생성하는 방법을 제공합니다. 개발자는 coverage 패키지를 dev_dependency로 추가한 후, 번들된 test_with_coverage 스크립트를 실행하여 모든 테스트를 자동으로 실행하고 커버리지 데이터를 JSON 및 LCOV 포맷으로 얻을 수 있습니다. 고급 사용자를 위해 VM 서비스를 활성화한 후 수동으로 컬렉션 및 포맷팅하는 워크플로우도 지원합니다. 또한 인라인 주석을 통해 특정 코드 라인, 블록 또는 전체 파일을 커버리지에서 제외하는 Coverage Directives 기능을 제공하여 정확한 커버리지 측정을 돕습니다. Flutter, Dart 네이티브 프로젝트 모두에서 사용 가능하며, 모노레포 환경에서도 유연하게 대응할 수 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/photoeven2-netizen/astronusa/tree/HEAD/.agents/skills/dart-collect-coverage

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Dart 및 Flutter 테스트 커버리지 구현하기

목차

테스트 기본

표준 Dart 테스트 패러다임을 사용하여 테스트 스위트를 구성합니다. Dart 프로젝트에서는 package:test를, Flutter 프로젝트에서는 flutter_test를 사용합니다.

  • 단위 테스트: 개별 함수, 메서드 또는 클래스를 검증합니다.
  • 컴포넌트/위젯 테스트: 모의 객체(package:mockito)를 사용하여 컴포넌트 동작, 레이아웃 및 상호작용을 검증합니다.
  • 통합 테스트: 시뮬레이션 또는 실제 기기에서 전체 앱 흐름을 검증합니다.

커버리지 지시문

인라인 주석을 사용하여 커버리지 측정 대상에서 특정 라인, 블록 또는 전체 파일을 제외합니다. 포맷팅 시 --check-ignore 플래그를 전달하여 이러한 지시문을 강제할 수 있습니다.

  • 한 줄 무시: // coverage:ignore-line
  • 코드 블록 무시: // coverage:ignore-start 및 // coverage:ignore-end
  • 전체 파일 무시: // coverage:ignore-file

워크플로우: 커버리지 보고서 구성 및 생성

다음 순차적 워크플로우에 따라 coverage 패키지를 추가하고, 테스트를 실행하며, LCOV 보고서를 생성합니다.

작업 진행 체크리스트:

  • 1. coverage를 dev_dependency로 추가합니다.
  • 2. 자동화된 커버리지 스크립트를 실행합니다.
  • 3. LCOV 출력을 검증합니다.

1. 의존성 추가

coverage 패키지를 프로젝트의 dev_dependency로 추가합니다. 일반 의존성에 추가하지 마십시오.

표준 Dart 프로젝트인 경우:

dart pub add dev:coverage

Flutter 프로젝트인 경우:

flutter pub add dev:coverage

2. 커버리지 수집 및 LCOV 생성

번들된 test_with_coverage 스크립트를 사용합니다. 이 스크립트는 모든 테스트를 자동으로 실행하고, Dart VM에서 JSON 커버리지 데이터를 수집한 후 LCOV 보고서로 포맷팅합니다.

dart run coverage:test_with_coverage

참고: Dart 워크스페이스(모노레포)에서 작업하는 경우 테스트 디렉터리를 명시적으로 지정하십시오(예: dart run coverage:test_with_coverage -- pkgs/foo/test pkgs/bar/test).

3. 피드백 루프: 출력 검증

검증기 실행 -> 오류 검토 -> 수정:

  1. 프로젝트 루트에 coverage/ 디렉터리가 생성되었는지 확인합니다.
  2. coverage/coverage.json(원시 데이터)과 coverage/lcov.info(포맷팅된 보고서) 파일이 존재하는지 확인합니다.
  3. 특정 파일에 대한 커버리지가 누락된 경우, 해당 파일이 테스트 파일에서 임포트되어 실행되는지 확인하거나, 의도적으로 제외하려면 // coverage:ignore-file을 추가합니다.

워크플로우: 고급 수동 컬렉션

VM 서비스, 격리 일시 중지에 대한 세밀한 제어가 필요하거나 브랜치/함수 수준의 커버리지가 필요한 경우 수동 컬렉션 워크플로우를 사용합니다.

작업 진행 체크리스트:

  • 1. VM 서비스를 활성화하여 테스트를 실행합니다.
  • 2. 원시 JSON 커버리지를 수집합니다.
  • 3. JSON을 LCOV로 포맷팅합니다.

1. VM 서비스로 테스트 실행

종료 시 격리를 일시 중지하고 특정 포트(예: 8181)에서 VM 서비스를 노출하여 테스트를 실행합니다.

dart run --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=8181 test &

2. 원시 커버리지 수집

실행 중인 VM 서비스에서 커버리지 데이터를 추출하여 JSON 파일에 출력합니다.

dart run coverage:collect_coverage --wait-paused --uri=http://127.0.0.1:8181/ -o coverage/coverage.json --resume-isolates

선택 사항: --function-coverage 및 --branch-coverage를 추가하여 더 깊은 메트릭을 수집할 수 있습니다(Dart VM 2.17.0+ 필요).

3. LCOV로 포맷팅

원시 JSON 데이터를 표준 LCOV 형식으로 변환합니다.

dart run coverage:format_coverage --packages=.dart_tool/package_config.json --lcov -i coverage/coverage.json -o coverage/lcov.info --check-ignore

예제

예제: pubspec.yaml 구성

pubspec.yaml에 coverage 패키지가 반드시 dev_dependencies 아래에만 포함되도록 하십시오.

name: my_dart_app
environment:
  sdk: ^3.0.0

dependencies:
  path: ^1.8.0

dev_dependencies:
  test: ^1.24.0
  coverage: ^1.15.0

예제: 무시 지시문 적용

무시 지시문을 사용하여 생성된 코드나 테스트 불가능한 경계 조건이 커버리지 점수를 낮추지 않도록 합니다.

// coverage:ignore-file
import 'package:meta/meta.dart';

class SystemConfig {
  final String env;

  SystemConfig(this.env);

  // coverage:ignore-start
  void legacyInit() {
    print('사용되지 않는 초기화');
  }
  // coverage:ignore-end

  bool isProduction() {
    if (env == 'prod') return true;
    return false; // coverage:ignore-line
  }
}

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

관련 스킬