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

单元测试运行报错:MongoDB连接字符串为null引发ArgumentNullException

异常原因排查

你当前贴出的测试代码里已经Mock了IDataService,理论上不会触发真实MongoDB调用,仍然抛出连接字符串空异常,说明你测试逻辑中没有使用你创建的Mock对象,而是实例化了真实的IDataService实现类,真实实现读取配置时获取不到连接串,触发报错。
针对配置读取问题的解决方法:

  • 检查测试项目中appsettings.json的文件属性,右键文件→属性→将复制到输出目录设置为如果较新则复制,避免生成时配置文件不被输出到运行目录。
  • .NET测试项目默认不会自动加载appsettings.json,需要手动构建配置对象,示例代码如下:
IConfiguration config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();
  • 注册Mongo相关服务或者初始化MongoClient时,要从上面构建的config对象中读取连接串,不要使用默认空配置。

现有测试代码逻辑错误

你当前编写的测试代码本身存在两处问题,即使解决了配置异常也无法通过测试:

  1. mock.Setup()的返回值是ISetup类型,不是GetPortfolio方法的执行结果。你需要先完成Mock配置,再调用Mock实例的对应方法获取返回值,修改后的代码如下:
// 配置Mock规则
mock.Setup(p => p.GetPortfolio("61377666d24fd78398a5a558")).ReturnsAsync(nn);
// 调用Mock实例方法获取结果
var result = await mock.Object.GetPortfolio("61377666d24fd78398a5a558");
  1. 你使用默认Equals方法对比两个PortfolioData引用类型对象,默认逻辑是对比内存地址,就算两个对象所有属性值完全一致也会返回false。你可以选择重写PortfolioData的Equals方法,或者逐个对比对象属性完成断言。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:06:06