193 lines
4.4 KiB
Markdown
193 lines
4.4 KiB
Markdown
# Testing Guide for splash_video
|
|
|
|
This package includes comprehensive unit and integration tests to ensure reliability and correctness.
|
|
|
|
## Test Structure
|
|
|
|
### Unit Tests (`/test`)
|
|
|
|
Unit tests verify individual components in isolation:
|
|
|
|
- **video_source_test.dart** - Tests for all Source types (Asset, Network, DeviceFile, Bytes)
|
|
- **splash_video_controller_test.dart** - Tests for controller lifecycle and operations
|
|
- **video_config_test.dart** - Tests for VideoConfig and VisibilityEnum
|
|
- **utils_test.dart** - Tests for utility functions, exceptions, and typedefs
|
|
- **splash_video_page_test.dart** - Widget tests for SplashVideoPage
|
|
|
|
### Integration Tests (`/example/integration_test`)
|
|
|
|
Integration tests verify end-to-end functionality:
|
|
|
|
- **plugin_integration_test.dart** - Full integration tests including:
|
|
- Configuration validation
|
|
- Error handling
|
|
- Overlay rendering
|
|
- Controller integration
|
|
- Source type handling
|
|
- VideoConfig integration
|
|
|
|
## Running Tests
|
|
|
|
### Run All Unit Tests
|
|
|
|
```bash
|
|
flutter test
|
|
```
|
|
|
|
### Run Specific Test File
|
|
|
|
```bash
|
|
flutter test test/video_source_test.dart
|
|
```
|
|
|
|
### Run Tests with Coverage
|
|
|
|
```bash
|
|
flutter test --coverage
|
|
```
|
|
|
|
### Run Integration Tests
|
|
|
|
```bash
|
|
cd example
|
|
flutter test integration_test/plugin_integration_test.dart
|
|
```
|
|
|
|
### Run Integration Tests on Device
|
|
|
|
```bash
|
|
cd example
|
|
flutter drive \
|
|
--driver=test_driver/integration_test.dart \
|
|
--target=integration_test/plugin_integration_test.dart
|
|
```
|
|
|
|
## Test Coverage
|
|
|
|
The test suite covers:
|
|
|
|
- ✅ All Source types and validation
|
|
- ✅ SplashVideoController lifecycle
|
|
- ✅ VideoConfig options
|
|
- ✅ Error handling and callbacks
|
|
- ✅ Overlay rendering
|
|
- ✅ Navigation validation
|
|
- ✅ Looping behavior
|
|
- ✅ Widget composition
|
|
|
|
## Writing New Tests
|
|
|
|
### Unit Test Template
|
|
|
|
```dart
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:splash_video/splash_video.dart';
|
|
|
|
void main() {
|
|
group('Feature Name', () {
|
|
test('should do something', () {
|
|
// Arrange
|
|
final input = ...;
|
|
|
|
// Act
|
|
final result = ...;
|
|
|
|
// Assert
|
|
expect(result, equals(expected));
|
|
});
|
|
});
|
|
}
|
|
```
|
|
|
|
### Widget Test Template
|
|
|
|
```dart
|
|
testWidgets('widget should render', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: YourWidget(),
|
|
),
|
|
);
|
|
|
|
expect(find.byType(YourWidget), findsOneWidget);
|
|
});
|
|
```
|
|
|
|
### Integration Test Template
|
|
|
|
```dart
|
|
testWidgets('integration scenario', (WidgetTester tester) async {
|
|
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
|
|
|
await tester.pumpWidget(MyApp());
|
|
await tester.pumpAndSettle();
|
|
|
|
// Interact with the app
|
|
await tester.tap(find.byIcon(Icons.add));
|
|
await tester.pumpAndSettle();
|
|
|
|
// Verify results
|
|
expect(find.text('Result'), findsOneWidget);
|
|
});
|
|
```
|
|
|
|
## CI/CD Integration
|
|
|
|
### GitHub Actions
|
|
|
|
```yaml
|
|
name: Tests
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: subosito/flutter-action@v2
|
|
- run: flutter pub get
|
|
- run: flutter test --coverage
|
|
- run: cd example && flutter test integration_test
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### MediaKit Initialization
|
|
|
|
Some tests require MediaKit initialization. This is handled automatically in test files:
|
|
|
|
```dart
|
|
setUpAll(() {
|
|
MediaKit.ensureInitialized();
|
|
});
|
|
```
|
|
|
|
### Video Assets
|
|
|
|
Integration tests may require actual video assets in `example/assets/`. For tests without real videos, use error handling:
|
|
|
|
```dart
|
|
onVideoError: (_) {}, // Suppress errors in tests
|
|
```
|
|
|
|
### Platform Differences
|
|
|
|
Some media_kit features are platform-specific. Tests should be designed to handle platform variations gracefully.
|
|
|
|
## Test Best Practices
|
|
|
|
1. **Keep tests isolated** - Each test should be independent
|
|
2. **Use descriptive names** - Test names should explain what they verify
|
|
3. **Test edge cases** - Include boundary conditions and error scenarios
|
|
4. **Mock external dependencies** - Use test doubles when appropriate
|
|
5. **Clean up resources** - Dispose controllers and players in tearDown
|
|
6. **Use test groups** - Organize related tests together
|
|
7. **Verify error handling** - Test both success and failure paths
|
|
|
|
## Known Limitations
|
|
|
|
- Video playback tests require platform-specific media support
|
|
- Some tests may need real video files to fully verify behavior
|
|
- Network tests depend on connectivity (should use mocks for CI/CD)
|
|
- Player initialization timing can vary across platforms
|