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

C#课程项目单元测试中app.config连接字符串失效问题排查

问题原因及解决方法

核心问题

单元测试项目不会自动共享主项目的App.config配置,你的代码读取不到连接字符串,本质是单元测试运行时找不到对应的配置文件,导致connectionString为null,进而触发ConnectionString property has not been initialized错误。

具体解决步骤

1. 给单元测试项目添加独立的App.config

右键单元测试项目 → 添加 → 新建项 → 选择「应用程序配置文件」,命名为App.config,然后将主项目中<connectionStrings>和<appSettings>节点的内容复制到这个文件里:

<configuration>
  <connectionStrings>
    <add name="strSql" connectionString="Server =.; Database = TNAME; Trusted_Connection = True;"/>
  </connectionStrings>
  <appSettings>
    <add key="strSql" value="Server =.; Database = TNAME; Trusted_Connection = True; "/>
   </appSettings>
</configuration>

2. 确保配置文件被复制到输出目录

右键单元测试项目的App.config → 属性 → 「复制到输出目录」选择「如果较新则复制」或「始终复制」。这样单元测试运行时,配置文件会被拷贝到测试程序的执行目录,才能被正确读取。

3. 修正连接字符串读取逻辑(推荐用官方规范方式)

建议使用ConfigurationManager.ConnectionStrings读取数据库连接字符串(这是微软推荐的数据库连接配置方式),代码调整为:

public DataSet GetDataSet(string sqlString)
{
    if(sqlConn?.State == ConnectionState.Open)
    { 
        sqlConn.Close(); 
    }
    // 读取connectionStrings节点的配置
    var connSettings = ConfigurationManager.ConnectionStrings["strSql"];
    if (connSettings == null)
    {
        throw new InvalidOperationException("未找到名为strSql的连接字符串配置");
    }
    string connectionString = connSettings.ConnectionString;
    sqlConn = new SqlConnection(connectionString);
    
    sqlConn.Open();
    sqlCmd.Connection = sqlConn;
    // 后续DataSet填充逻辑...
}

4. 检查单元测试项目的程序集引用

确保单元测试项目已引用System.Configuration程序集:
右键单元测试项目 → 添加 → 引用 → 程序集 → 框架 → 找到System.Configuration并勾选。

额外说明

你硬编码连接字符串能正常运行,是因为跳过了配置文件读取环节,直接给SqlConnection传入了有效字符串。只要解决单元测试项目的配置文件问题,就能正常读取配置中的连接字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:20:31