You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
}

额外注意

  1. 你的代码存在类名拼写不一致问题:测试代码中实例化的是CarsContext,但上下文类的定义是CarContext,请修正拼写避免其他运行异常。
  2. 后续如果用到IMongoDatabase的其他成员(比如你代码中调用的GetCollection<Car>("cars")),也需要提前做Mock配置,否则调用时也会返回null或触发异常。

内容的提问来源于stack exchange,提问作者user1765862

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:09:03