有没有办法为您正在单元测试的 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 从该服务获取其配置。您现在可以通过模拟此接口或创建第二个实现来提供替代配置。