运行 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.json
或 config
文件是正确的方法。您还需要的是 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
中设置环境变量
我的解决方案中有一个测试项目,可以 运行 在实时 sql 数据库上进行测试。问题是我必须提供连接字符串才能连接到数据库。
我是否可以提供在 Visual Studio 在线构建 Parameters/Variables 中指定的不同连接字符串?我研究过创建一个 appsettings.json 文件,但我仍然不确定如何覆盖 appsettings.json.
中的值请务必注意,我的测试项目正在测试 EF Core SqlServer。
继续 appsettings.json
或 config
文件是正确的方法。您还需要的是 Tokenizer 构建任务,它将用 VSO 变量的值替换连接字符串。
在配置文件 (appsettings.json
) 中,为连接字符串 属性 提供值 __SQLConnectionString__
。然后,在构建 VSO 变量中,添加一个名为 SQLConnectionString
的变量。无论您为此变量提供什么值,分词器任务都会用该值替换 __SQLConnectionString__
。
为了让这个工作。我添加了一个 appsettings.json
文件并将 属性 复制到输出目录 更改为 始终复制 。然后我使用设置方法
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