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
相关产品推荐
相关产品推荐

