174 lines
5.5 KiB
Markdown
174 lines
5.5 KiB
Markdown
# Unit Tests - RobotNet10.NavigationTune
|
|
|
|
Thư mục này chứa các unit tests cho project `RobotNet10.NavigationTune`.
|
|
|
|
## 📁 Cấu trúc Tests
|
|
|
|
```
|
|
RobotNet10.NavigationTune.Test/
|
|
├── Helpers/
|
|
│ └── TestHelpers.cs # Helper methods để tạo test data
|
|
├── Navigation/
|
|
│ └── Core/
|
|
│ ├── PIDTests.cs # Tests cho PID controller
|
|
│ ├── MotorDynamicsModelTests.cs # Tests cho Motor Dynamics Model
|
|
│ └── PurePursuitSimplifiedTests.cs # Tests cho Pure Pursuit
|
|
├── Services/
|
|
│ ├── MetricsCalculatorTests.cs # Tests cho Metrics Calculator
|
|
│ └── ParameterManagerTests.cs # Tests cho Parameter Manager
|
|
├── Scenarios/
|
|
│ ├── StraightLineScenarioTests.cs # Tests cho Straight Line Scenario
|
|
│ └── CircleScenarioTests.cs # Tests cho Circle Scenario
|
|
└── README.md # File này
|
|
```
|
|
|
|
## 🧪 Test Coverage
|
|
|
|
### ✅ Đã được test
|
|
|
|
1. **PID Controller**
|
|
- Constructor với config
|
|
- PID_step với zero error
|
|
- Proportional term
|
|
- Integral term accumulation
|
|
- Derivative term
|
|
- Clamping to max/min
|
|
- Reset functionality
|
|
- WithKp, WithKi, WithKd methods
|
|
|
|
2. **Motor Dynamics Model**
|
|
- Constructor với default và config values
|
|
- PredictVelocity với time before/after delay
|
|
- PredictVelocity với long time
|
|
- GetSettlingTime calculation
|
|
- GetRiseTime calculation
|
|
- Decreasing command velocity
|
|
- ToString method
|
|
|
|
3. **Pure Pursuit Simplified**
|
|
- Constructor và SetPath
|
|
- CalculateAngularVelocity với straight path
|
|
- CalculateAngularVelocity với curved path
|
|
- GetCurrentLookahead với low/high velocity
|
|
- Low confidence handling
|
|
|
|
4. **Metrics Calculator**
|
|
- CalculateMetrics với empty telemetry
|
|
- Perfect tracking scenario
|
|
- Tracking errors calculation
|
|
- Smoothness metrics
|
|
- Efficiency metrics
|
|
- Overall score calculation
|
|
- Goal errors calculation
|
|
|
|
5. **Parameter Manager**
|
|
- Validate với valid parameters
|
|
- Validate với negative Kp/Ki
|
|
- Validate với invalid lookahead range
|
|
- GetDefaultPreset
|
|
- GetAggressivePreset
|
|
- GetSmoothPreset
|
|
- Validate với invalid blend ratio
|
|
- Validate với invalid velocity limits
|
|
|
|
6. **Test Scenarios**
|
|
- StraightLineScenario: GenerateReferencePath, IsGoalReached, GetGoalPose
|
|
- CircleScenario: GenerateReferencePath, IsGoalReached, GetGoalPose, radius validation
|
|
|
|
## 🚀 Chạy Tests
|
|
|
|
### Sử dụng Visual Studio
|
|
1. Mở Test Explorer (Test → Test Explorer)
|
|
2. Build solution
|
|
3. Chọn tests cần chạy và click "Run"
|
|
|
|
### Sử dụng dotnet CLI
|
|
```bash
|
|
cd srcs/RobotNet10/Tests/RobotNet10.NavigationTune.Test
|
|
dotnet test
|
|
```
|
|
|
|
### Chạy tests cụ thể
|
|
```bash
|
|
dotnet test --filter "FullyQualifiedName~PIDTests"
|
|
dotnet test --filter "FullyQualifiedName~MetricsCalculatorTests"
|
|
```
|
|
|
|
### Chạy với coverage
|
|
```bash
|
|
dotnet test --collect:"XPlat Code Coverage"
|
|
```
|
|
|
|
## 📊 Test Statistics
|
|
|
|
- **Total Tests**: 40+ test cases
|
|
- **Test Framework**: xUnit
|
|
- **Assertion Library**: FluentAssertions
|
|
- **Mocking Framework**: Moq (for future use)
|
|
- **Coverage Areas**:
|
|
- Core navigation controllers
|
|
- Metrics calculation
|
|
- Parameter validation
|
|
- Test scenarios
|
|
|
|
## 🛠️ Test Helpers
|
|
|
|
`TestHelpers.cs` cung cấp các helper methods để tạo test data:
|
|
|
|
- `CreateDefaultParameterSet()` - Default parameter set
|
|
- `CreateCustomParameterSet()` - Custom parameter set với specified values
|
|
- `CreateStraightLineScenario()` - Straight line scenario
|
|
- `CreateCircleScenario()` - Circle scenario
|
|
- `CreateSimplePath()` - Simple reference path
|
|
- `CreateTelemetryData()` - Single telemetry data point
|
|
- `CreateTelemetryHistory()` - List of telemetry data points
|
|
|
|
## 📝 Best Practices
|
|
|
|
1. **AAA Pattern**: Arrange, Act, Assert
|
|
2. **Test Isolation**: Mỗi test độc lập, không phụ thuộc vào test khác
|
|
3. **Meaningful Names**: Tên test mô tả rõ behavior được test
|
|
4. **Test Data**: Sử dụng TestHelpers để tạo consistent test data
|
|
5. **Edge Cases**: Test cả success và failure scenarios
|
|
6. **Floating Point**: Sử dụng `BeApproximately` cho floating point comparisons
|
|
|
|
## 🔍 Test Categories
|
|
|
|
### Unit Tests
|
|
- Test từng component riêng biệt
|
|
- Mock dependencies nếu cần
|
|
- Fast execution
|
|
|
|
### Integration Tests (Future)
|
|
- Test interaction giữa các components
|
|
- Test với real data
|
|
- Test end-to-end scenarios
|
|
|
|
## 📈 Coverage Goals
|
|
|
|
- [x] PID Controller: ~90%
|
|
- [x] Motor Dynamics Model: ~90%
|
|
- [x] Pure Pursuit Simplified: ~80%
|
|
- [x] Metrics Calculator: ~85%
|
|
- [x] Parameter Manager: ~90%
|
|
- [x] Test Scenarios: ~90%
|
|
- [ ] Velocity Estimator Simplified: Pending
|
|
- [ ] Safety Monitor: Pending
|
|
- [ ] Test Executor: Pending (requires mocking)
|
|
- [ ] Tuning Navigation: Pending (requires mocking)
|
|
|
|
## 🐛 Known Issues
|
|
|
|
- Một số tests phụ thuộc vào floating point precision
|
|
- Tests cho TestExecutor và TuningNavigation cần mocking của ILocalizationProvider và IVelocityProvider
|
|
|
|
## 🤝 Contributing
|
|
|
|
Khi thêm tests mới:
|
|
|
|
1. Follow naming convention: `MethodName_Scenario_ExpectedBehavior`
|
|
2. Sử dụng TestHelpers cho test data
|
|
3. Sử dụng FluentAssertions cho assertions
|
|
4. Test cả success và failure cases
|
|
5. Document any special test setup requirements
|