build-flow.api/tests/BuildFlow.Rag.Tests/Stub/StubEmbeddingService.cs
xiangning f550074fcc test(platform): 添加平台模块测试基础设施和RAG端到端测试
- 为平台测试添加EntityFrameworkCore和Xunit引用
- 实现PlatformTestDb创建带审计字段自动填充的测试数据库
- 添加DictionaryConfiguration支持配置值获取测试
- 实现完整的密码强度验证规则
- 添加RAG问答全链路端到端测试
- 创建多个Stub服务用于解耦外部依赖测试
- 实现测试专用的当前用户上下文
2026-07-07 17:31:50 +08:00

37 lines
1.2 KiB
C#

using BuildFlow.Domain.Interfaces;
namespace BuildFlow.Rag.Tests.Stub;
/// <summary>
/// Stub IEmbeddingService:返回固定维度(768)的向量,与 DB vector(768) 列匹配。
/// 维度由 embeddinggemma-300m 决定。所有文本返回相同向量(测试场景下足够)。
/// </summary>
public sealed class StubEmbeddingService : IEmbeddingService
{
/// <summary>向量维度,匹配 document_chunks.embedding vector(768)。</summary>
public const int Dimensions = 768;
/// <summary>是否返回空向量(用于测试零分块路径)。</summary>
public bool ReturnEmpty { get; init; }
private static float[] BuildVector()
{
var v = new float[Dimensions];
for (var i = 0; i < Dimensions; i++)
v[i] = (i % 10) / 10f;
return v;
}
public Task<float[]> EmbedAsync(string text, CancellationToken ct = default)
=> Task.FromResult(ReturnEmpty ? [] : BuildVector());
public Task<List<float[]>> EmbedBatchAsync(List<string> texts, CancellationToken ct = default)
{
if (ReturnEmpty)
return Task.FromResult(new List<float[]>());
var vector = BuildVector();
return Task.FromResult(texts.Select(_ => vector).ToList());
}
}