3.7 KiB
测试与构建 — 总览
概述
本组文档覆盖 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 个里程碑节点,附带风险评估矩阵。
子模块列表
测试方案设计
覆盖三层测试项目结构、单元测试示例(BashToolTests、ToolRegistryTests、AnthropicProviderTests、CompanionServiceTests)、集成测试示例(McpIntegrationTests)、E2E 测试示例(CliTests),以及测试金字塔数量分布。
原始来源: 无直接对应(原始项目无系统测试)
构建与部署
覆盖 Directory.Build.props 全局 MSBuild 配置、FreeCode.csproj 主项目引用、build.sh 多平台构建脚本、install.sh 一键安装脚本,以及 AOT + 单文件 + Trimmed 发布参数。
原始来源: scripts/build.ts(Bun 构建脚本)、install.sh(原始安装脚本)
迁移路线图
覆盖 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 构建脚本的单平台模式相比,构建产物更小、启动更快。