# Run all tests
flutter test
# Run with verbose output
flutter test --reporter expanded
# Run with coverage report
flutter test --coverage
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html
test/
├── models/
│ └── conversion_task_test.dart # ConversionTask + ConversionStatus
├── providers/
│ ├── conversion_provider_test.dart # ConversionProvider unit tests
│ ├── history_provider_test.dart # HistoryProvider with mocked DB
│ └── settings_provider_test.dart # SettingsProvider with mock prefs
├── services/
│ └── database_service_test.dart # AudioFile, AudioQuality models
└── utils/
├── debouncer_test.dart # Debouncer with fake_async
├── file_utils_test.dart # FileUtils (extension check, naming)
├── format_utils_test.dart # FormatUtils (size, duration, date)
└── validation_utils_test.dart # ValidationUtils (file name rules)
| Area | Tests | Coverage |
|---|---|---|
| Models (AudioFile, AudioQuality, ConversionTask) | 19 | ~95% |
| Utils (Format, File, Validation, Debouncer) | 30 | ~90% |
| Providers (Settings, History, Conversion) | 28 | ~80% |
| Services (Database) | 11 | ~70% |
| Total | 88 | ~85% |
mocktail — used for service mocking (no codegen needed)SharedPreferences.setMockInitialValues — used for Settings testsfake_async — used for Debouncer timer tests# Single file
flutter test test/utils/format_utils_test.dart
# By name pattern
flutter test --name "fileSize"
# Only models
flutter test test/models/