91 lines
3.7 KiB
Markdown
91 lines
3.7 KiB
Markdown
# 测试与构建 — 总览
|
||
|
||
> 所属项目: free-code .NET 10 重写
|
||
> 配套文档: [总体概述与技术选型](../总体概述与技术选型/总体概述与技术选型.md) | [核心模块设计](../核心模块设计/核心模块设计.md) | [参考映射](reference/原始代码映射-测试与构建.md)
|
||
|
||
---
|
||
|
||
## 概述
|
||
|
||
本组文档覆盖 free-code .NET 10 重写项目的质量保证、构建发布和迁移规划三个方面。原始 TypeScript 项目没有系统化的测试套件;.NET 重写从零开始建立完整的分层测试体系,并以 AOT 单文件发布为目标设计构建管道。
|
||
|
||
测试框架采用 **xUnit 2 + NSubstitute 5 + FluentAssertions 7** 组合。目标覆盖率是核心路径 80%+,由 200 个测试用例(120 单元 + 60 集成 + 20 E2E)构成测试金字塔。
|
||
|
||
构建目标是跨 5 个平台(macOS arm64/x64、Linux x64/arm64、Windows x64)的 AOT 原生二进制,通过 `build.sh` 脚本批量发布,配合 `install.sh` 实现一键安装。
|
||
|
||
迁移路线图覆盖 35 个工作周,分 12 个阶段,设置 8 个里程碑节点,附带风险评估矩阵。
|
||
|
||
---
|
||
|
||
## 子模块列表
|
||
|
||
### [测试方案设计](测试与构建-测试方案设计.md)
|
||
|
||
覆盖三层测试项目结构、单元测试示例(`BashToolTests`、`ToolRegistryTests`、`AnthropicProviderTests`、`CompanionServiceTests`)、集成测试示例(`McpIntegrationTests`)、E2E 测试示例(`CliTests`),以及测试金字塔数量分布。
|
||
|
||
原始来源: 无直接对应(原始项目无系统测试)
|
||
|
||
---
|
||
|
||
### [构建与部署](测试与构建-构建与部署.md)
|
||
|
||
覆盖 `Directory.Build.props` 全局 MSBuild 配置、`FreeCode.csproj` 主项目引用、`build.sh` 多平台构建脚本、`install.sh` 一键安装脚本,以及 AOT + 单文件 + Trimmed 发布参数。
|
||
|
||
原始来源: `scripts/build.ts`(Bun 构建脚本)、`install.sh`(原始安装脚本)
|
||
|
||
---
|
||
|
||
### [迁移路线图](测试与构建-迁移路线图.md)
|
||
|
||
覆盖 35 周 12 阶段详细规划、M1-M8 里程碑说明表,以及风险评估与缓解策略矩阵。
|
||
|
||
原始来源: 无直接对应(新增规划文档)
|
||
|
||
---
|
||
|
||
## 测试金字塔
|
||
|
||
```
|
||
[E2E: 20]
|
||
/ CliTests \
|
||
/ OneShotMode \
|
||
/ InteractiveRepl \
|
||
==================
|
||
[集成: 60]
|
||
/ QueryPipeline \
|
||
/ McpIntegration \
|
||
/ LspIntegration \
|
||
/ BridgeIntegration \
|
||
/ TaskManager Plugins \
|
||
=================================
|
||
[单元: 120]
|
||
Engine / Tools / Commands /
|
||
ApiProviders / Mcp / Lsp /
|
||
Services / State
|
||
```
|
||
|
||
---
|
||
|
||
## 关键设计决策
|
||
|
||
**测试替身策略**
|
||
|
||
所有外部依赖(HTTP 客户端、文件系统、进程管理)通过接口注入,测试中由 NSubstitute 的 `Substitute.For<T>()` 替换,确保单元测试完全隔离,不依赖网络或本地环境。
|
||
|
||
**AOT 兼容优先**
|
||
|
||
构建配置全面启用 `AotPublish`、`PublishTrimmed`、`EnableAotAnalyzer`,确保代码在编译期就暴露反射问题,而不是在生产运行时崩溃。JSON 序列化通过 Source Generator 生成,完全不依赖运行时反射。
|
||
|
||
**平台矩阵覆盖**
|
||
|
||
`build.sh` 对 `osx-arm64`、`osx-x64`、`linux-x64`、`linux-arm64`、`win-x64` 五个 RID 各生成独立的原生二进制,与原始 Bun 构建脚本的单平台模式相比,构建产物更小、启动更快。
|
||
|
||
---
|
||
|
||
## 参考资料
|
||
|
||
- [原始代码映射 — 测试与构建](reference/原始代码映射-测试与构建.md)
|
||
- [总体概述与技术选型](../总体概述与技术选型/总体概述与技术选型.md)
|
||
- [核心模块设计 — 工具系统](../核心模块设计/核心模块设计-工具系统.md)
|
||
- [基础设施设计](../基础设施设计/基础设施设计.md)
|