Overview
测试的分工、框架、Case 与报告
Orisumi 的测试分三类,都用 TUnit 执行。本页说明每类测试验证什么、用到哪些公共工具,以及 Case 页和测试报告怎样对应。
测试分工
| 类型 | 验证什么 | 数据库 |
|---|---|---|
| 单元测试 | 独立的规则和转换逻辑 | 不启动 |
| 集成测试 | Observer、后端组件和 PostgreSQL 的协作 | 需要数据库的用例,每个用例一个独立的测试数据库 |
| 端到端测试 | 完整的用户操作流程 | 需要数据库的用例使用独立的测试数据库 |
框架与公共工具
TUnit 通过 Microsoft.Testing.Platform 运行,版本 1.72.16 由 Directory.Packages.props 管理。
tests/Orisumi.Testing 为集成测试和端到端测试提供数据库工具。它使用 Orisumi.Testing 命名空间,每个类型一个文件,依赖 Infrastructure、EF Core、Npgsql 和 Testcontainers.PostgreSql,版本同样由 Directory.Packages.props 管理。
| 类型 | 职责 |
|---|---|
PostgresTestInstance | 启动和销毁 PostgreSQL 容器,创建用例数据库 |
TestDatabase | 提供连接字符串,释放时删除用例数据库 |
集成测试和端到端测试各自创建自己的容器,细节见 Database。
模型测试
tests/Orisumi.Model.Tests 按 Core 的规则检查 Core 和 Application:提交、读取和删除版本,EntitySchema 的校验,引用的枚举,以及事实时间。存储使用内存实现,时间由可控的 TimeProvider 提供,不需要数据库。每个测试用注释写明它验证的规则编号,例如 // VERSION-7。
dotnet test --project tests/Orisumi.Model.Tests/Orisumi.Model.Tests.csproj集成测试
tests/Orisumi.Integration.Tests 按 Case 组织,覆盖四部分:
- API 与 PostgreSQL 存储:通过
WebApplicationFactory启动 API,每个用例连接自己的测试数据库。Case 见 Submission、Reading、Lists、Referrers、Deletion、Errors 和 Transactions。 - .NET SDK 的提交:SDK 使用独立的 SQLite 文件,后端是模拟的 HTTP 处理器或真实的 API。Case 见 Registration、Local Versions、Confirmation 和 Rejections。
- 前台状态 Observer:使用模拟的读数。Case 见 本机应用身份、时段边界、提交与恢复 和 被拒绝的版本。另有身份文件和登记文件的复用与损坏保留测试。
- API 的遥测:检查结构化日志、HTTP 追踪、指标和 OTLP 导出。
自动测试不调用 macOS 原生接口,原生读取的手动验证步骤见 src/Observers/Orisumi.Observer.ForegroundState/README.md。
Case
每个 Case 一页,写为什么验证、前置条件、操作和预期结果。Case ID 稳定,与测试方法名无关;测试用 [Property("caseId", "…")] 引用它。页面末尾显示最新报告中匹配这个 ID 的执行结果,参数化的测试会有多条结果。这样设计的理由见 ADR · 开发验证与测试证据。
报告
Integration Report 显示 TUnit 集成测试的 JSON 报告。本地文档站每次刷新都重新读取 TestResults 中最新的报告;公开站显示发布时运行集成测试得到的报告,见 ADR · 文档站的发布。JSON 是测试结果的权威来源;查看报告不会运行测试。报告由 fumadocs-test-reports 展示,可以搜索、筛选,查看详情、输出和时间线。