测试项目结构
本文档中引用的文件
- CMS.Plugin.MyPluginName.Application.Tests.csproj
- CMS.Plugin.MyPluginName.Domain.Tests.csproj
- CMS.Plugin.MyPluginName.EntityFrameworkCore.Tests.csproj
- CMS.Plugin.MyPluginName.TestBase.csproj
- MyPluginNameApplicationTestModule.cs
- MyPluginNameDomainTestModule.cs
- MyPluginNameTestEntityFrameworkCoreModule.cs
- MyPluginNameTestBaseModule.cs
- MyPluginNameApplicationTestBase.cs
- MyPluginNameDomainTestBase.cs
- MyPluginNameEntityFrameworkTestBase.cs
- MyPluginNameTestBase.cs
- CMSPluginApplicationModule.cs
- CMSPluginDomainModule.cs
- CMSPluginEntityFrameworkCoreModule.cs
目录
引言
本文档详细说明基于ABP框架的插件化项目中测试项目的整体结构划分。重点分析Application.Tests、Domain.Tests、EntityFrameworkCore.Tests和TestBase四个测试子项目的职责划分、依赖关系、测试范围及协作机制。通过分析.csproj文件中的项目引用和[DependsOn]模块依赖,揭示分层测试架构的设计原理与实现方式。
测试项目结构概览
测试项目采用分层架构设计,包含四个核心子项目:
CMS.Plugin.MyPluginName.Application.Tests:应用层测试项目CMS.Plugin.MyPluginName.Domain.Tests:领域层测试项目CMS.Plugin.MyPluginName.EntityFrameworkCore.Tests:数据访问层测试项目CMS.Plugin.MyPluginName.TestBase:测试基础库项目
这种分层结构实现了测试代码的关注点分离,确保各层测试能够独立运行,同时通过明确的依赖关系支持集成测试场景。
Diagram sources
- CMS.Plugin.MyPluginName.Application.Tests.csproj
- CMS.Plugin.MyPluginName.Domain.Tests.csproj
- CMS.Plugin.MyPluginName.EntityFrameworkCore.Tests.csproj
- CMS.Plugin.MyPluginName.TestBase.csproj
Section sources
各测试子项目职责与测试范围
Application.Tests
Application.Tests项目负责测试应用服务层(Application Layer)的功能,包括应用服务类、DTO转换、权限验证等。其测试范围涵盖应用服务的业务逻辑正确性、输入验证、异常处理等。
Section sources
Domain.Tests
Domain.Tests项目专注于领域层(Domain Layer)的测试,包括实体、值对象、领域服务、仓储接口等。其测试范围主要为领域模型的业务规则、不变性约束、领域事件等核心领域逻辑。
Section sources
EntityFrameworkCore.Tests
EntityFrameworkCore.Tests项目负责数据访问层的集成测试,验证实体映射、数据库查询、事务处 理等EF Core相关功能。它使用SQLite内存数据库进行测试,确保数据库操作的正确性。
Section sources
TestBase
TestBase项目是测试基础库,为其他测试项目提供通用的测试基类、服务配置、数据种子等功能。它封装了ABP集成测试的基础设施,包括依赖注入、工作单元、内存数据库初始化等。
Section sources
分层测试隔离与依赖配置
测试项目的依赖关系通过.csproj文件中的ProjectReference进行配置,实现了自上而下的分层依赖:
<!-- Application.Tests 依赖 Domain.Tests -->
<ProjectReference Include="..\CMS.Plugin.MyPluginName.Domain.Tests\CMS.Plugin.MyPluginName.Domain.Tests.csproj" />
<!-- Domain.Tests 依赖 EntityFrameworkCore.Tests -->
<ProjectReference Include="..\CMS.Plugin.MyPluginName.EntityFrameworkCore.Tests\CMS.Plugin.MyPluginName.EntityFrameworkCore.Tests.csproj" />
<!-- EntityFrameworkCore.Tests 依赖 TestBase -->
<ProjectReference Include="..\CMS.Plugin.MyPluginName.TestBase\CMS.Plugin.MyPluginName.TestBase.csproj" />
这种依赖配置实现了测试隔离:
- 应用层测试可以依赖 领域层测试模块,进行跨层集成测试
- 领域层测试依赖数据访问层测试,确保领域逻辑与数据持久化的一致性
- 数据访问层测试依赖测试基础库,获得统一的测试基础设施
Diagram sources
- CMS.Plugin.MyPluginName.Application.Tests.csproj
- CMS.Plugin.MyPluginName.Domain.Tests.csproj
- CMS.Plugin.MyPluginName.EntityFrameworkCore.Tests.csproj
- CMS.Plugin.MyPluginName.TestBase.csproj
Section sources