Mock MongoDB时CarsContext的MongoClient属性始终为null问题求解
问题根源
你仅配置了IMongoClient.GetDatabase方法返回Mock的IMongoDatabase对象,但没有为这个Mock的IMongoDatabase的Client属性配置返回值,Moq框架对未显式配置的接口成员默认返回null,这就是_db.Client始终为空的原因。
修复方案
在单元测试的Setup方法中,补充配置Mock数据库对象的Client属性返回值:
[TestInitialize] public void Setup() { _mockClient = new Mock<IMongoClient>(); _mockDB = new Mock<IMongoDatabase>(); var db = Guid.NewGuid().ToString(); _mockClient.Setup(c => c.GetDatabase(db, null)).Returns(_mockDB.Object); // 新增配置:设置Mock数据库的Client属性返回Mock的客户端实例 _mockDB.SetupGet(d => d.Client).Returns(_mockClient.Object); carsContext = new CarsContext(_mockClient.Object, db); }
额外注意
- 你的代码存在类名拼写不一致问题:测试代码中实例化的是
CarsContext,但上下文类的定义是CarContext,请修正拼写避免其他运行异常。 - 后续如果用到
IMongoDatabase的其他成员(比如你代码中调用的GetCollection<Car>("cars")),也需要提前做Mock配置,否则调用时也会返回null或触发异常。
内容的提问来源于stack exchange,提问作者user1765862
相关产品推荐
相关产品推荐

