有没有办法为您正在单元测试的 class 设置配置设置?
Is there a way to set the configuration settings for a class that you are unit testing?
我已经为我的测试项目编写了所有逻辑,但我 运行 正在尝试在 class 中设置我想要 [=27] 的配置变量=]. class 需要将 workingDirectory
变量设置为文件路径,具体取决于程序 运行 所在的环境(例如生产或测试),现在该变量为空。如何将配置设置设置为 运行,就好像 class 正常 运行 一样(因为配置设置是在 class 为 运行 时设置的它自己的或者当它没有被测试时)?
我尝试将正在测试的 class 中使用的 app.config 文件添加到测试项目中,但仍然无法为我设置配置变量。
private static readonly string WorkingDir = ConfigurationManager.AppSettings["WorkingDirectory"];
var files = Directory.GetFiles($@"{WorkingDir}\in"); //this results in the
//filepath being "C:\in" when testing since the WorkingDir configuration
//variable doesn't get set when the class is called from the test project
<add key="WorkingDirectory" value="\Test" xdt:Transform="Insert"/>
当 class 是来自测试项目的 运行 时,配置变量应该是“\Test”,而不是空值或空格。这最终是一个错误,因为没有一个目录与给定给 Directory.GetFiles()
代码行的字符串相匹配,因此它找不到我想要它找到的文件。
您需要创建一个服务来为您的 class:
提供配置
public interface IConfiguration
{
string WorkingDirectory { get; }
}
public class ConfigurationManagerProvider: IConfiguration
{
public WorkingDirectory => ConfigurationManager.AppSettings["WorkingDirectory"];
}
然后将 IConfiguration
服务注入您的 class,并让 class 从该服务获取其配置。您现在可以通过模拟此接口或创建第二个实现来提供替代配置。
我已经为我的测试项目编写了所有逻辑,但我 运行 正在尝试在 class 中设置我想要 [=27] 的配置变量=]. class 需要将 workingDirectory
变量设置为文件路径,具体取决于程序 运行 所在的环境(例如生产或测试),现在该变量为空。如何将配置设置设置为 运行,就好像 class 正常 运行 一样(因为配置设置是在 class 为 运行 时设置的它自己的或者当它没有被测试时)?
我尝试将正在测试的 class 中使用的 app.config 文件添加到测试项目中,但仍然无法为我设置配置变量。
private static readonly string WorkingDir = ConfigurationManager.AppSettings["WorkingDirectory"];
var files = Directory.GetFiles($@"{WorkingDir}\in"); //this results in the
//filepath being "C:\in" when testing since the WorkingDir configuration
//variable doesn't get set when the class is called from the test project
<add key="WorkingDirectory" value="\Test" xdt:Transform="Insert"/>
当 class 是来自测试项目的 运行 时,配置变量应该是“\Test”,而不是空值或空格。这最终是一个错误,因为没有一个目录与给定给 Directory.GetFiles()
代码行的字符串相匹配,因此它找不到我想要它找到的文件。
您需要创建一个服务来为您的 class:
提供配置public interface IConfiguration
{
string WorkingDirectory { get; }
}
public class ConfigurationManagerProvider: IConfiguration
{
public WorkingDirectory => ConfigurationManager.AppSettings["WorkingDirectory"];
}
然后将 IConfiguration
服务注入您的 class,并让 class 从该服务获取其配置。您现在可以通过模拟此接口或创建第二个实现来提供替代配置。