Files
CleanArchitecture-template/base/.agent/skills/custom-skills/GenerateTest/IntegrationTest.md

2.3 KiB

name, description
name description
GenerateIntegrationTest Hướng dẫn tạo Integration Test (người thật việc thật) sử dụng WebApplicationFactory và Testcontainers.

GenerateIntegrationTest Skill

Khi user yêu cầu tạo Integration Test để kiểm tra API endpoint từ đầu đến cuối, bạn cần sinh ra code theo hướng dẫn sau:

Mục đích

  • Test xem các mảnh ghép lắp vào ghép với nhau có chạy đúng không.
  • Flow: Client gọi API -> Middleware -> Controller -> CQRS Handler/Service -> Ghi/Đọc Database thật.

Hướng dẫn thực hiện

  1. Setup WebApplicationFactory:

    • Tự động setup WebApplicationFactory<Program> (tạo một test server ngay trong RAM của .NET).
    • Override cấu hình ứng dụng nếu cần thiết (ví dụ thay đổi ConnectionString trỏ sang test container).
  2. Setup Testcontainers (Real Database):

    • Sử dụng thư viện Testcontainers (hoặc cấu hình tương tự) để tự động spin up một Docker container chứa Database thật (ví dụ: PostgreSQL, SQL Server).
    • Đảm bảo database container này được start trước khi chạy test và tự động xóa (dispose) sau khi test xong. Tránh dùng SQLite in-memory vì hay bị lỗi vặt và không tương đương với database production.
  3. Viết kịch bản Test gọi API (Arrange - Act - Assert):

    • Tạo đối tượng HttpClient từ WebApplicationFactory.CreateClient().
    • Arrange: Chuẩn bị payload data dạng JSON objects hoặc tạo trước data base records nếu là API GET/PUT/DELETE.
    • Act: Gọi thẳng vào API endpoint tương ứng bằng code. VD: await client.PostAsJsonAsync("/api/v1/samples", payload);.
    • Assert: Kiểm tra kết quả trả về:
      • Check HTTP Status: có phải 200 OK hay 400 Bad Request không.
      • Deserialize response body để check chính xác object.
      • (Tùy chọn) Query thẳng vào database container xem bản ghi đã được sinh ra/cập nhật thật chưa.

Định dạng file đầu ra

  • Đường dẫn: Chứa trong project test tương ứng như tests/MyNewProjectName.IntegrationTests/Controllers/....
  • Tên file: [ControllerName]Tests.cs (ví dụ: OrdersControllerTests.cs).