如何测试使用的命令行参数?
How can you test command line arguments used?
我有一些代码可以创建配置,添加一些环境变量,然后,如果它们存在,添加一些命令行参数。此处的目的是命令行参数可以覆盖环境变量。所以我想测试一下,如果使用同名的环境变量和命令行参数,命令行参数会覆盖环境变量。
这很可能是针对 uris 之类的东西。
所以我的代码是这样的:
public static DoSomeConfigStuff()
{
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();
var commandLineArgs = Environment.GetCommandLineArgs();
if(commandLineArgs != null)
{
builder.AddCommandLine(commandLineArgs);
}
var root = builder.build();
// set various uris using root.GetValue<string>("some uri name")
}
我想对此进行测试,以便在提供命令行参数时使用它提供的 uri,特别是在它同时作为环境变量和命令行参数提供的情况下。有没有办法做到这一点?我读到人们通过使用环境变量有效地模拟命令行参数,但这在这里不起作用,因为我想在设置两者时进行测试。
你还需要这个逻辑吗?只需无条件地添加命令行参数,IConfiguration 将首先处理使用命令行参数,然后回退到环境变量。您真的不需要对此进行单元测试,因为这是 ConfigurationBuilder 的一个函数,而不是您的代码(但如果您愿意,可以对其进行测试)。
var root = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddCommandLine(Environment.GetCommandLineArgs())
.Build();
如果您确实需要这样做,请将构建 IConfigurationRoot 与从环境中获取数据分开。前一步可以单元测试,后面不需要:
// This method can be unit tested
IConfigurationRoot BuildConfiguration(string[] commandLineArgs)
{
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();
if (commandLineArgs != null)
{
builder.AddCommandLine(commandLineArgs);
}
return builder.Build()
}
// This method is NOT unit tested
public static DoSomeConfigStuff()
{
var root = BuildConfiguration(Environment.GetCommandLineArgs());
// set various uris using root.GetValue<string>("some uri name")
}
我有一些代码可以创建配置,添加一些环境变量,然后,如果它们存在,添加一些命令行参数。此处的目的是命令行参数可以覆盖环境变量。所以我想测试一下,如果使用同名的环境变量和命令行参数,命令行参数会覆盖环境变量。
这很可能是针对 uris 之类的东西。
所以我的代码是这样的:
public static DoSomeConfigStuff()
{
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();
var commandLineArgs = Environment.GetCommandLineArgs();
if(commandLineArgs != null)
{
builder.AddCommandLine(commandLineArgs);
}
var root = builder.build();
// set various uris using root.GetValue<string>("some uri name")
}
我想对此进行测试,以便在提供命令行参数时使用它提供的 uri,特别是在它同时作为环境变量和命令行参数提供的情况下。有没有办法做到这一点?我读到人们通过使用环境变量有效地模拟命令行参数,但这在这里不起作用,因为我想在设置两者时进行测试。
你还需要这个逻辑吗?只需无条件地添加命令行参数,IConfiguration 将首先处理使用命令行参数,然后回退到环境变量。您真的不需要对此进行单元测试,因为这是 ConfigurationBuilder 的一个函数,而不是您的代码(但如果您愿意,可以对其进行测试)。
var root = new ConfigurationBuilder()
.AddEnvironmentVariables()
.AddCommandLine(Environment.GetCommandLineArgs())
.Build();
如果您确实需要这样做,请将构建 IConfigurationRoot 与从环境中获取数据分开。前一步可以单元测试,后面不需要:
// This method can be unit tested
IConfigurationRoot BuildConfiguration(string[] commandLineArgs)
{
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();
if (commandLineArgs != null)
{
builder.AddCommandLine(commandLineArgs);
}
return builder.Build()
}
// This method is NOT unit tested
public static DoSomeConfigStuff()
{
var root = BuildConfiguration(Environment.GetCommandLineArgs());
// set various uris using root.GetValue<string>("some uri name")
}