testing

- Test Pyramid: More unit and widget tests, fewer integration tests. Unit tests are fastest and cheapest.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "testing" with this command: npx skills add dhruvanbhalara/skills/dhruvanbhalara-skills-testing

Testing Strategy

  • Test Pyramid: More unit and widget tests, fewer integration tests. Unit tests are fastest and cheapest.

  • Mirror Test Rule: 100% logic and widget coverage. No code without a test.

  • Mirror Organization: Test files MUST strictly mirror the lib/ directory structure and end with _test.dart .

  • Coverage Targets: Target 100% logic coverage for domain and bloc layers.

  • Test Independence: Each test MUST be independent. No shared mutable state between tests.

Unit Testing

  • Follow the Arrange-Act-Assert (Given-When-Then) convention for clear and maintainable tests

  • Use mocks for dependencies except for lightweight third-party services

  • Test business logic in isolation from the UI

  • For tests, ensure to create 5 to 8 tests for logical operations with real scenarios

  • Mocking Protocol: Use mocktail for all dependency mocking. STRICTLY prohibit using real implementation dependencies in unit tests.

  • Pure Logic: Business logic inside BLoCs or UseCases should be extracted to static pure functions for 100% unit test coverage.

Widget Testing

  • Write widget tests for all major UI components

  • Test user interactions and state changes

  • Widget Keys: Use Key('feature_action_id') format on interactive widgets for test access

  • Test Localization: Use AppLocalizations (context.l10n ) in widget tests — no hardcoded strings

Integration Testing

  • Use IntegrationTestWidgetsFlutterBinding.ensureInitialized() at the start of integration tests

  • Interact with widgets via Key (e.g., find.byKey(const ValueKey('increment')) )

  • Use pumpAndSettle() to wait for animations and async operations to complete

  • Run with: flutter test integration_test/

Test Naming & Structure

  • Test Naming: Use string interpolation for test group names: group('$ClassName', not group('ClassName', . This ensures consistency and enables better tooling support.

  • Test Grouping: Use group() to organize tests by feature, class, or state for clearer reporting.

  • Descriptive Names: Test names should clearly describe what is being tested and why.

Common Test Errors

  • A RenderFlex overflowed... — Wrap widget in Expanded or constrain dimensions in test

  • Vertical viewport was given unbounded height — Wrap ListView in SizedBox with fixed height in test

  • setState called during build — Defer state changes to post-frame callback

Running Tests

  • flutter test — Run all unit and widget tests

  • flutter test test/path/to/file_test.dart — Run specific test file

  • flutter test integration_test/ — Run integration tests

  • flutter test --coverage — Run with coverage report

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

testing

No summary provided by upstream source.

Repository SourceNeeds Review
General

testing

No summary provided by upstream source.

Repository SourceNeeds Review
General

testing

No summary provided by upstream source.

Repository SourceNeeds Review
General

flutter-architecture

No summary provided by upstream source.

Repository SourceNeeds Review