# ElasticSearch NoSQL 单元测试报告
# 1. 测试范围
覆盖 test/Air.Cloud.UnitTest/Modules/ElasticSearch。
目标是验证 INoSqlRepository<T> 仓储契约、连接池行为和索引命名规则。单元测试使用内存仓储,不连接真实 ES 集群。
# 2. 测试内容与边界
# 仓储 CRUD 边界
| 测试目标 | 边界内入参 | 边界外 / 异常入参 | 预期结果 |
|---|---|---|---|
| 保存文档 | Id = doc-1,Tags = integration,created,Url = /integration/es/create | 无 | SaveAsync 返回同 Id 文档。 |
| 按 Id 查询 | 查询 doc-1 | 文档已保存 | 返回文档非空,Url 与写入值一致。 |
| 更新文档 | Tags = integration,updated,Url = /integration/es/update | 文档已存在 | UpdateAsync 返回同 Id,查询结果包含更新后的 Tags。 |
| 删除文档 | 删除 doc-1 | 文档已存在 | 删除返回 true,再次查询返回 null。 |
# 批量与缺失文档边界
| 测试目标 | 边界内入参 | 边界外 / 异常入参 | 预期结果 |
|---|---|---|---|
| 批量保存 | batch-1、batch-2,Tags = batch | 多文档输入 | 保存返回 true,按 Tags = batch 查询数量为 2。 |
| 查询不存在文档 | Id = missing-document | 文档未写入 | 返回 null,不抛异常。 |
| 删除不存在文档 | Id = missing-document | 文档未写入 | 抛出 InvalidOperationException,避免误判删除成功。 |
| 更新不存在文档 | Id = missing-document | 文档未写入 | 抛出 InvalidOperationException,避免静默创建错误数据。 |
# 连接与索引命名边界
| 测试目标 | 边界内入参 | 边界外 / 异常入参 | 预期结果 |
|---|---|---|---|
| 连接池重建 | 清理连接池后再次创建仓储 | 池中无连接 | 仓储可重新建立连接。 |
| 年切分索引 | Name = air-cloud-it,Pattern = Year | 当前年份 | 生成 air-cloud-it-{yyyy}。 |
| 月切分索引 | Name = air-cloud-it,Pattern = Month | 当前年月 | 生成 air-cloud-it-{yy}-{M}。 |
| 日切分索引 | Name = air-cloud-it,Pattern = Day | 当前年内天数 | 生成 air-cloud-it-{yy}-{DayOfYear}。 |
# 3. 测试结果
本报告已单独运行对应过滤命令,结果:6/12 通过,6 失败。
dotnet test test/Air.Cloud.UnitTest/Air.Cloud.UnitTest.csproj --no-restore --filter "FullyQualifiedName~Air.Cloud.UnitTest.Modules.ElasticSearch"
失败用例集中在 ElasticSearchTests.cs,均为 10s 超时:
Save_should_recreate_connection_after_pool_is_clearedSaveAsync_should_return_saved_document_with_same_identifierUpdate_should_persist_modified_document_valuesDelete_should_remove_saved_documentQuery_should_return_saved_documentSave_should_persist_trace_log_document
说明:ElasticSearchMiddlewareContractTests 契约类通过;失败的是旧的真实连接/连接池相关单元类。当前报告按完整模块过滤口径记录失败,不再用混合通过结果替代。
# 4. 对应目标中间件版本
单元测试不连接真实 ElasticSearch 集群。目标是当前源码中的 NoSQL 仓储契约与索引命名规则。