Golang Testify Mock未返回指定值问题排查
Testify Mock配置不生效问题解决
你的问题出在Mock结构体的方法实现上——你写的伪实现直接返回了nil, nil,完全没用到Testify的Mock机制,所以不管怎么用On配置返回值,实际调用时都会走这个固定返回逻辑。
修正方法很简单,把Mock方法改成Testify要求的格式,让它接入Mock匹配逻辑:
type MockUserRepo struct { mock.Mock } func (m *MockUserRepo) FindByUsername(username string) (*User, error) { // 触发Testify的Mock参数匹配与返回值逻辑 args := m.Called(username) // 将返回值转换为对应类型返回 return args.Get(0).(*User), args.Error(1) }
这样修改后,你原来的配置代码就能正常工作了:
m := NewMockUserRepo() m.On("FindByUsername", mock.Anything).Return(&User{ Username: "test" }, nil) svc := NewService(m) user, err := svc.FindByUsername("anything") // 现在会返回{Username: "test"}, nil
核心逻辑是:Testify的Mock需要通过Called()方法来关联你用On()配置的规则,它会根据传入的参数匹配对应的返回值,而不是靠你写死的伪实现返回值。
内容的提问来源于stack exchange,提问作者Acha Bill
相关产品推荐
相关产品推荐

