在集成测试的应用程序启动时覆盖 aspnetcore appsettings.json 键值

Overriding aspnetcore appsettings.json key value on application startup for integration tests

我正在编写一些 运行 针对 docker 服务器 运行ning 实例的 aspnetcore 集成测试。我计划使用 xUnit 集合并在不同的端口上启动一个单独的 SQL 服务器容器实例,用于特定的测试集合。因此多个 SQL 服务器实例 运行 在不同的端口上连接。 我创建了一个单独的 appsettings.testing.json 文件,该文件将在测试 host 开始时加载。此设置 json 文件具有连接字符串,测试 host 将在开始测试时用于连接。

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },

  "ConnectionStrings": {
    "TestDb": "Server=.;Database=MyDb;MultipleActiveResultSets=true;user id=sa;password=Password01!;TrustServerCertificate=True"
  }
}

有什么方法可以让我在开始测试 host 时覆盖键 TestDb 的值?在启动主机之前,我在特定端口上启动 SQL 容器,并希望 host 使用修改后的连接字符串,该字符串将提到 port 并连接到它。

我一直在查看文档,但无法理解在 运行 时是否有办法做到这一点?

您可以在配置测试 Web 主机时覆盖设置:

builder.ConfigureAppConfiguration(configBuilder =>
{
    configBuilder.AddInMemoryCollection(new Dictionary<string, string>
    {
        ["ConnectionStrings:TestDb"] = "connection string here"
    });
});

在您的情况下,in-memory 配置效果最佳。 您还可以在此处添加用户机密等。