现象
go test ./Raft/ 多个用例稳定失败:
--- FAIL: TestNewRaft raft_test.go:27: Expected initial term to be 0, got 15
--- FAIL: TestGetState
--- FAIL: TestLeaderAppendsLog
--- FAIL: TestRequestVoteRPC
--- FAIL: TestAppendEntriesRPC
根因
NewRaft 默认从 raft_data 目录 readPersist() 加载持久化状态(currentTerm/votedFor/log)。测试运行目录下存在上一次运行遗留的 raft_data,于是 TestNewRaft 读到 term=15 而非期望的初始 0。测试依赖运行目录的残留状态,不是 hermetic 的(与 config 包 #90 同类问题)。
影响
- 与存储/网络改动无关,main 上即存在。
- CI 当前只跑
go vet / go build + 冒烟压测,不跑该单测,故未被拦截;但 go test ./... 本地必红。
可选修复
- 测试用
NewRaftWithDataDir(..., t.TempDir()) 注入隔离数据目录(已存在该构造函数)。
- 测试 setup/teardown 清理 raft_data。
倾向方案 1:每个用例独立 TempDir,彻底 hermetic。
由 PR #106 开发过程中 go test ./... 发现。
现象
go test ./Raft/多个用例稳定失败:根因
NewRaft默认从raft_data目录readPersist()加载持久化状态(currentTerm/votedFor/log)。测试运行目录下存在上一次运行遗留的 raft_data,于是TestNewRaft读到 term=15 而非期望的初始 0。测试依赖运行目录的残留状态,不是 hermetic 的(与 config 包 #90 同类问题)。影响
go vet/go build+ 冒烟压测,不跑该单测,故未被拦截;但go test ./...本地必红。可选修复
NewRaftWithDataDir(..., t.TempDir())注入隔离数据目录(已存在该构造函数)。倾向方案 1:每个用例独立 TempDir,彻底 hermetic。
由 PR #106 开发过程中
go test ./...发现。