사용 방법
- 설치 명령을 복사하고 자신의 에이전트 환경에 설치하기 전에 소스 패키지를 확인하세요.
- 필요한 도구, 인증 정보, 지원 환경은 원본 문서에서 확인하세요.
- 입력과 원하는 산출물을 설명하고 출처와 결과를 대조하세요.
npx skills add https://github.com/flutter/agent-plugins --skill dart-add-unit-test시작 전 확인
- 설치에는 모델 구독, API 한도, 파일 접근 권한이 포함되지 않습니다.
- 별점 수와 설치 수는 활동 지표이며 독립적인 품질·보안 검증이 아닙니다.
원본 저장소의 제목, 예시, 코드, 표, 링크, 이미지를 유지해 표시합니다.
Testing Dart and Flutter Applications
Contents
Structuring Test Files
Organize test files to mirror the lib directory structure to maintain predictability.
- Place all test code within the
testdirectory at the root of the package. - Append
_test.dartto the end of all test file names (e.g.,lib/src/utils.dartshould be tested intest/src/utils_test.dart). - If writing integration tests, place them in an
integration_testdirectory at the root of the package.
Writing Tests
Utilize package:test as the standard testing library for Dart applications.
- Import
package:test/test.dart(orpackage:flutter_test/flutter_test.dartfor Flutter). - Group related tests using the
group()function to provide shared context. - Define individual test cases using the
test()function. - Validate outcomes using the
expect()function alongside matchers (e.g.,equals(),isTrue,throwsA()). - Write asynchronous tests using standard
async/awaitsyntax. The test runner automatically waits for theFutureto complete. - Manage test setup and teardown using
setUp()andtearDown()callbacks. - If testing code that relies on dependency injection, use
package:mockitoalongsidepackage:testto generate mock objects, configure fixed scenarios, and verify interactions.
Executing Tests
Select the appropriate test runner based on the project type and test location.
- If working on a pure Dart project, execute tests using the
dart testcommand. - If working on a Flutter project, execute tests using the
flutter testcommand. - If running integration tests, explicitly specify the directory path, as the default runner ignores it:
dart test integration_testorflutter test integration_test.
Test Implementation Workflow
Follow this sequential workflow when implementing new test suites. Copy the checklist to track your progress.
Task Progress
- [ ] 1. Create the test file in the
test/directory, ensuring the_test.dartsuffix. - [ ] 2. Import
package:test/test.dartand the target library. - [ ] 3. Define a
main()function. - [ ] 4. Initialize shared resources or mocks using
setUp(). - [ ] 5. Write
test()cases grouped by functionality usinggroup(). - [ ] 6. Execute the test suite using the appropriate CLI command.
- [ ] 7. Feedback Loop: Run test -> Review stack trace for failures -> Fix implementation or assertions -> Re-run until passing.
Examples
Standard Unit Test Suite
Demonstrates grouping, setup, synchronous, and asynchronous testing.
import 'package:test/test.dart';
import 'package:my_package/calculator.dart';
void main() {
group('Calculator', () {
late Calculator calc;
setUp(() {
calc = Calculator();
});
test('adds two numbers correctly', () {
expect(calc.add(2, 3), equals(5));
});
test('handles asynchronous operations', () async {
final result = await calc.fetchRemoteValue();
expect(result, isNotNull);
expect(result, greaterThan(0));
});
});
}Mocking with Mockito
Demonstrates configuring a mock object for dependency injection testing.
import 'package:test/test.dart';
import 'package:mockito/mockito.dart';
import 'package:mockito/annotations.dart';
import 'package:my_package/api_client.dart';
import 'package:my_package/data_service.dart';
// Generate the mock using build_runner: dart run build_runner build
@GenerateNiceMocks([MockSpec<ApiClient>()])
import 'data_service_test.mocks.dart';
void main() {
group('DataService', () {
late MockApiClient mockApiClient;
late DataService dataService;
setUp(() {
mockApiClient = MockApiClient();
dataService = DataService(apiClient: mockApiClient);
});
test('returns parsed data on successful API call', () async {
// Configure the mock
when(mockApiClient.get('/data')).thenAnswer((_) async => '{"id": 1}');
// Execute the system under test
final result = await dataService.fetchData();
// Verify outcomes and interactions
expect(result.id, equals(1));
verify(mockApiClient.get('/data')).called(1);
});
});
}



