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

2.6 KiB

name, description
name description
GenerateArchitectureTest Hướng dẫn tạo Architecture Test sử dụng NetArchTest.Rules để bảo vệ kiến trúc Clean Architecture.

GenerateArchitectureTest Skill

Khi user yêu cầu kiểm tra hoặc khởi tạo Architecture Test, bạn cần sử dụng thư viện NetArchTest.Rules để sinh luận kiểm điểm nhằm bảo vệ chặt chẽ cấu trúc "Clean Architecture" của dự án.

Mục đích

  • Ngăn chặn Dev code ẩu, import sai library/module giữa các tầng (layer).
  • Nếu vi phạm (VD: import Entity Framework vào tầng Domain), bài test này sẽ báo ĐỎ ngay lập tức lúc build code. Bằng chứng thép giúp kiến trúc được bảo vệ tuyệt đối!

Hướng dẫn viết Test Rules

Bạn cần viết các test method (dùng [Fact] với xUnit hoặc NUnit) sử dụng Fluent API của NetArchTest.Rules. Dưới đây là các luật phổ biến bắt buộc:

  1. Domain Layer Rules (Luật tầng Domain):

    • Domain không được phụ thuộc vào bất cứ thứ gì từ Infrastructure, Application hay WebAPI.
    [Fact]
    public void DomainLayer_ShouldNot_HaveDependencyOn_OtherLayers()
    {
        var result = Types.InAssembly(DomainAssembly)
            .ShouldNot()
            .HaveDependencyOnAny(
                "MyNewProjectName.Application", 
                "MyNewProjectName.Infrastructure", 
                "MyNewProjectName.WebAPI"
            )
            .GetResult();
    
        Assert.True(result.IsSuccessful);
    }
    
  2. Application Layer Rules (Luật tầng Application):

    • Application Layer chỉ được phép giao tiếp với Domain, KHÔNG ĐƯỢC có dependency vào Infrastructure hoặc WebAPI.
  3. Controller Rules (Luật đặt tên/vị trí API):

    • Controller bắt buộc phải kế thừa class BaseAPIController, và có hậu tố là "Controller".
    • Không được phép truy vấn Database trực tiếp từ Controller (ngăn không cho Inject DbContext hay IRepository vào Controller, kiểm duyệt dependencies của Constructor).
  4. Handler Rules (CQRS):

    • Các Handler xử lý logic phải implements interface IRequestHandler và kết thúc bằng CommandHandler hoặc QueryHandler. Nó chỉ nằm ở Application Layer.

Định dạng file đầu ra

  • Đường dẫn: Chứa trong test project như tests/MyNewProjectName.ArchitectureTests/.
  • Tên file: Thường đặt tên theo phạm vi test như LayerTests.cs, DesignConventionTests.cs, NamingRulesTests.cs, v.v.