运行 C# 集成测试在本地使用可配置变量并作为 VSTS 构建的一部分

Run C# integration tests with a configurable variable locally and as a part of a VSTS build

我的解决方案中有一个测试项目,可以 运行 在实时 sql 数据库上进行测试。问题是我必须提供连接字符串才能连接到数据库。

我是否可以提供在 Visual Studio 在线构建 Parameters/Variables 中指定的不同连接字符串?我研究过创建一个 appsettings.json 文件,但我仍然不确定如何覆盖 appsettings.json.

中的值

请务必注意,我的测试项目正在测试 EF Core SqlServer。

继续 appsettings.jsonconfig 文件是正确的方法。您还需要的是 Tokenizer 构建任务,它将用 VSO 变量的值替换连接字符串。

在配置文件 (appsettings.json) 中,为连接字符串 属性 提供值 __SQLConnectionString__。然后,在构建 VSO 变量中,添加一个名为 SQLConnectionString 的变量。无论您为此变量提供什么值,分词器任务都会用该值替换 __SQLConnectionString__

为了让这个工作。我添加了一个 appsettings.json 文件并将 属性 复制到输出目录 更改为 始终复制 。然后我使用设置方法

调用 DbTests 的抽象 class

appsettings.json

{
  "ConnectionStrings": {
    "TestDatabase": "YOUR CONNECTION STRING GOES HERE"
  }
}

DbTests.cs(片段)

// ...

IConfigurationRoot configurationRoot = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .AddEnvironmentVariables()  // <== this is important
    .Build();

string connectionString = configurationRoot.GetConnectionString("TestDatabase")

// ...

.AddEnvironmentVariables() 允许我用环境变量覆盖 appsettings.json 中包含的变量。我可以在 VSTS

中设置环境变量