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

