mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-12 04:07:34 +00:00
4 个文件全部在 `<module>/test/`,源码目录仍零 `_test.go`。
共 18 条判据,只调导出接口,输入 → 可观察输出。
## pkg/embedding —— 注册表 + 校验
TestRegisterThenOpen 注册 → Names/Open → Info/Embed 输出
TestOpenUnknownProviderReportsError 未注册名报错且可诊断
TestValidateInfo 维度/指纹真值表
TestValidateVector 维度不符 / NaN / Inf 必拒
## pkg/generation —— 注册表
TestRegisterThenOpen 注册 → Names/Open → Info/Generate 输出
TestOpenUnknownProviderReportsError 未注册名报错
## internal/memory/text —— 真实临时目录
TestAppendThenRecentEvents Append → RecentEvents 读回内容
TestReplayVisitsAppendedEvents Replay 收到全部事件
TestFileCountAndStats 写后文件数/统计可用
## internal/memory/social —— 真实内存图库
TestNilDBReportsError 无图库时写操作报错(不静默)
TestSetTraitThenGetTrait 特质往返
TestSetTraitOverwrites 同键覆盖
TestAddRelationThenGetRelations 关系往返
TestListPersons 人物列表含已写入的人
## 变异验证(改回旧实现必须红)
embedding 非有限值检查留 NaN 通过 → ★ 非法向量被接受:[NaN 2 3]
generation 未注册名静默返回 nil → ★ 未注册 provider 的报错不可诊断
text Append 不写盘 → ★ RecentEvents = 0 条
social SetTrait 不写 → ★ 无图库却 SetTrait 成功
前两条第一版变异分别造成「编译失败(math 未使用)」和「panic」,
不是干净的断言红 —— 改成只改行为、仍能编译的变异后确认有效。
## 验证
go build ./... PASS
go vet ./... PASS
gofmt -l 干净
python3 .github/scripts/check-ci-gates.py PASS
go test ./... -count=1 32 个测试包 / 100 包无测试 / 0 FAIL
4 个新包 -race 全绿
源码目录 _test.go 0
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package test
|
||
|
||
// pkg/generation 的黑盒判据:Register → Names/Open → 输出。
|
||
|
||
import (
|
||
"context"
|
||
"strings"
|
||
"testing"
|
||
|
||
"github.com/JianFeeeee/HologramAgent/pkg/generation"
|
||
)
|
||
|
||
type stubProvider struct{}
|
||
|
||
func (p *stubProvider) Generate(ctx context.Context, r generation.Request) (generation.Response, error) {
|
||
return generation.Response{Text: "generated"}, nil
|
||
}
|
||
func (p *stubProvider) Info() generation.Info {
|
||
return generation.Info{Model: "stub-model"}
|
||
}
|
||
func (p *stubProvider) Close() {}
|
||
|
||
func TestRegisterThenOpen(t *testing.T) {
|
||
const name = "contract-gen-provider"
|
||
generation.Register(name, func(cfg generation.Config) (generation.Provider, error) {
|
||
return &stubProvider{}, nil
|
||
})
|
||
found := false
|
||
for _, n := range generation.Names() {
|
||
if n == name {
|
||
found = true
|
||
}
|
||
}
|
||
if !found {
|
||
t.Fatal("★ Names() 里没有刚注册的 provider")
|
||
}
|
||
p, err := generation.Open(name, generation.Config{})
|
||
if err != nil {
|
||
t.Fatalf("Open: %v", err)
|
||
}
|
||
defer p.Close()
|
||
if got := p.Info().Model; got != "stub-model" {
|
||
t.Fatalf("★ Info.Model = %q", got)
|
||
}
|
||
out, err := p.Generate(context.Background(), generation.Request{})
|
||
if err != nil || out.Text != "generated" {
|
||
t.Fatalf("★ Generate = %+v / %v", out, err)
|
||
}
|
||
}
|
||
|
||
func TestOpenUnknownProviderReportsError(t *testing.T) {
|
||
_, err := generation.Open("definitely-not-registered-xyz", generation.Config{})
|
||
if err == nil || !strings.Contains(err.Error(), "unknown provider") {
|
||
t.Fatalf("★ 未注册 provider 的报错不可诊断:%v", err)
|
||
}
|
||
}
|