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

MSTest集成测试无法读取App.Config配置文件连接字符串问题求助

问题原因
  • 配置文件复制属性问题:测试项目中App.config文件的「复制到输出目录」属性默认值为「不复制」,编译后配置文件不会被输出到程序运行目录,导致ConfigurationManager无法读取到对应配置。
  • .NET 5 + MSTest 兼容问题:.NET 5属于.NET Core技术谱系,和传统.NET Framework的配置加载逻辑不同。MSTest运行.NET 5测试时的宿主程序为testhost.dll,默认会读取同目录下的testhost.dll.config,而非测试项目生成的「[测试项目名].dll.config」,就算App.config被复制到输出目录,文件名不匹配也会导致读取结果为null。
解决建议

方案1:改用.NET 5原生配置体系(最推荐)

该方案完全适配.NET 5的设计逻辑,不存在遗留兼容问题:

  1. 给测试项目安装Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Json两个Nuget包
  2. 移除原有App.config,新增appsettings.json配置文件,内容如下:
{
  "ConnectionStrings": {
    "Database": "Data Source=DESKTOP\\SQLEXPRESS;Initial Catalog=Database;Integrated Security=True;"
  }
}
  1. 右键点击appsettings.json,将属性栏中的「复制到输出目录」修改为「如果较新则复制」
  2. 调整测试代码的配置读取逻辑:
[TestClass]
public class AdminDatabaseReaderTests
{
    private readonly string _connectionString;

    public AdminDatabaseReaderTests()
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();
        _connectionString = config.GetConnectionString("Database");
    }

    [TestMethod]
    [TestCategory("Database Tests")]
    public void AdminDatabaseReader_GetAll_WhenCallingDatabase_ShouldReturnListOfAdminTableRows()
    {
        // Arrange
        var adminDatabaseReader = new AdminDatabaseReader(_connectionString);
        // Act
        var listOfAdmins = adminDatabaseReader.GetAll();
        // Assert
    }
}

方案2:兼容原有ConfigurationManager写法

如果不想修改现有的ConfigurationManager读取逻辑,可以通过生成事件自动匹配配置文件名:

  1. 右键点击测试项目的App.config文件,将「复制到输出目录」修改为「如果较新则复制」
  2. 右键测试项目 → 选择「属性」→ 切换到「生成事件」 tab → 在「生成后事件命令行」输入框中填写以下内容:
copy /Y "$(TargetDir)$(TargetName).dll.config" "$(TargetDir)testhost.dll.config"
  1. 重新编译项目后运行测试,即可正常读取连接字符串。

方案3:临时调试方案(仅用于快速验证功能,不推荐正式使用)

如果只是临时验证测试逻辑,可以直接把连接字符串硬编码在测试代码中,绕开配置读取环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:09:02