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

XUnit .NET Core C# 测试报错ConnectionString属性未初始化如何解决

解决方案

你可以通过添加配置文件+修改服务注册代码的方式解决该问题,以下是具体操作步骤:

步骤1:添加配置文件(推荐使用appsettings.json)

在XUnit测试项目的根目录新建appsettings.json文件,填入数据库连接配置:

{
  "ConnectionStrings": {
    "Default": "替换为你的实际数据库连接字符串,例:Server=127.0.0.1;Database=测试库名;Uid=账号;Pwd=密码;TrustServerCertificate=True;"
  }
}

右键点击该文件 -> 选择「属性」-> 将「复制到输出目录」设置为如果较新则复制,避免运行时找不到配置文件。

步骤2:安装必要的NuGet包

确认测试项目已安装以下依赖:

  • Xunit.DependencyInjection:XUnit原生不支持自定义服务的构造函数注入,该包提供DI支持
  • Microsoft.Extensions.Configuration.Json:用于读取json配置文件
  • System.Data.SqlClient / Microsoft.Data.SqlClient:SqlServer连接驱动(根据你使用的数据库类型调整)

步骤3:修改Startup配置代码

调整Startup类逻辑,添加配置读取、数据库连接、Repository的注册逻辑:

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup()
    {
        // 构建配置对象,读取appsettings.json
        Configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // 注册配置实例
        services.AddSingleton(Configuration);
        
        // 注册数据库连接,从配置中读取连接串
        services.AddScoped<IDbConnection>(sp => 
            new SqlConnection(Configuration.GetConnectionString("Default")));
        
        // 注册你的Repository(Service依赖的下层服务必须提前注册)
        services.AddScoped<IRepository, Repository>();
        
        // 注册测试需要的Service
        services.AddSingleton<Service>();
    }
}

可选优化

如果不需要单独的配置文件,也可以直接在Startup中硬编码连接串,适合简单测试场景:

services.AddScoped<IDbConnection>(sp => 
    new SqlConnection("你的硬编码连接字符串"));

另外建议你将测试方法的返回值从async void改为async Task,这是XUnit异步测试的最佳实践,避免异常无法正常捕获的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:30:04