Initial commit

This commit is contained in:
2026-07-03 16:31:37 +07:00
commit 899c7c637d
1939 changed files with 641750 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
# Unit Tests - RobotNet10.RobotManager
Thư mục này chứa các unit tests cho Robot Management module.
## 📁 Cấu trúc Tests
```
RobotNet10.RobotManager.Test/
├── Helpers/
│ └── TestHelpers.cs # Helper methods để tạo test data
├── Services/
│ ├── RobotModelServiceTests.cs # Tests cho RobotModelService
│ ├── RobotServiceTests.cs # Tests cho RobotService
│ └── RobotModelImageStorageServiceTests.cs # Tests cho Image Storage Service
├── README.md # File này
└── RobotNet10.RobotManager.Test.csproj
```
## 🧪 Test Coverage
### ✅ Đã được test
1. **RobotModelService**
- CreateAsync với valid data
- CreateAsync với duplicate model name (throws exception)
- GetAllAsync
- GetByIdAsync (existing và non-existent)
- UpdateAsync (valid data và non-existent ID)
- DeleteAsync (existing, non-existent, và model với robots)
- SearchAsync
- ExistsAsync
- GetUsageInfoAsync
2. **RobotService**
- CreateAsync với valid data
- CreateAsync với duplicate robot ID (throws exception)
- CreateAsync với non-existent model ID (throws exception)
- GetAllAsync (với và không có filters)
- GetByIdAsync
- GetByRobotIdAsync
- UpdateAsync
- DeleteAsync
- GetByModelIdAsync
- SearchAsync
- ExistsAsync
3. **RobotModelImageStorageService**
- SaveImageAsync
- GetImageAsync
- DeleteImageAsync
- ImageExistsAsync
- GetImageDimensionsAsync
## 🚀 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.RobotManager.Test
dotnet test
```
### Chạy tests cụ thể
```bash
# Chạy tests trong một class
dotnet test --filter "FullyQualifiedName~RobotModelServiceTests"
# Chạy một test method cụ thể
dotnet test --filter "FullyQualifiedName~CreateAsync_ValidData_ReturnsCreatedRobotModel"
```
### Chạy với output chi tiết
```bash
dotnet test --verbosity normal
```
### Chạy với code coverage
```bash
dotnet test --collect:"XPlat Code Coverage"
```
## 📊 Test Statistics
- **Total Tests**: ~30+ test cases
- **Test Framework**: NUnit
- **Coverage Areas**:
- RobotModelService: CRUD operations, validation, business rules
- RobotService: CRUD operations, validation, filtering
- RobotModelImageStorageService: File operations
## 🛠️ Test Helpers
`TestHelpers.cs` cung cấp các helper methods để tạo test data:
- `CreateTestRobotModel()` - Tạo RobotModel entity với các parameters tùy chọn
- `CreateTestRobot()` - Tạo Robot entity với các parameters tùy chọn
- `SeedTestData()` - Seed test data vào database context
## 📝 Best Practices
1. **AAA Pattern**: Arrange, Act, Assert
2. **Test Isolation**: Mỗi test độc lập, sử dụng InMemory database riêng
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
## 🔍 Test Categories
### Unit Tests
- Test từng service riêng biệt
- Sử dụng InMemory database để test database operations
- Mock external dependencies (IWebHostEnvironment, ILogger)
- Fast execution
### Integration Tests (Future)
- Test interaction giữa các components
- Test với real database (optional)
- Test end-to-end scenarios
## 📈 Coverage Goals
- [x] RobotModelService: Core methods ~90%
- [x] RobotService: Core methods ~90%
- [x] RobotModelImageStorageService: File operations ~80%
- [ ] Controllers: Pending (có thể thêm sau)
- [ ] SignalR Hub: Pending (cần integration test)
## 🐛 Known Issues
- Image dimension tests sử dụng invalid image data (cần valid PNG để test đầy đủ)
- Controller tests chưa được implement (có thể thêm sau với integration tests)
## 🤝 Contributing
Khi thêm tests mới:
1. Follow naming convention: `MethodName_Scenario_ExpectedBehavior`
2. Sử dụng TestHelpers cho test data
3. Đảm bảo test isolation (mỗi test có database riêng)
4. Test cả success và failure cases