Golang创建Mock MongoDB客户端用于单元测试遇nil问题求助
解决mtest中Mock模式下客户端为nil的问题
切换到Embedded模式获取有效客户端
你当前用的是mtest.Mock模式,这种轻量级模拟模式不会创建真实的MongoDB客户端实例,所以mt.Client自然是nil。如果需要完整的客户端对象,把ClientType改成mtest.Embedded即可,它会启动一个嵌入式MongoDB实例,此时就能拿到有效的客户端:mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Embedded)) defer mt.Close() client := mt.Client // 这里client不再是nil collection := mt.Coll若坚持用Mock模式,调整测试逻辑
Mock模式的设计初衷是直接通过mt.Coll来模拟集合的操作(比如注入预期的查询结果、错误等),不需要依赖客户端实例。如果你的测试代码必须用到客户端,可以考虑:- 重构逻辑,尽量基于集合
mt.Coll来编写测试 - 用接口抽象客户端的操作,自己实现一个mock客户端注入到测试中,而不是依赖mtest的客户端
- 重构逻辑,尽量基于集合
内容的提问来源于stack exchange,提问作者Pramit Pakhira
相关产品推荐
相关产品推荐

