Files
BQP/srcs/RobotNet10/Tests/RobotNet10.RobotManager.Test
2026-07-13 09:25:40 +07:00
..
2026-07-13 09:25:40 +07:00
2026-07-13 09:25:40 +07:00
2026-07-13 09:25:40 +07:00

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

cd srcs/RobotNet10/Tests/RobotNet10.RobotManager.Test
dotnet test

Chạy tests cụ thể

# 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

dotnet test --verbosity normal

Chạy với code coverage

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

  • RobotModelService: Core methods ~90%
  • RobotService: Core methods ~90%
  • 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