单元测试用例调试时如何读取Web.Config文件?

Rah*_*hul 3 c# unit-testing web-config

我正在尝试从配置文件中获取数据(URL)

即:

<AppSettings>
<add key="configurationUrl" value="http://xx.xx.xx.xx:XXXX/configuration service/configurations"/>
Run Code Online (Sandbox Code Playgroud)

使用以下代码

 reqClient.BaseAddress = System.Configuration.ConfigurationManager.AppSettings["configurationUrl"].ToString();
Run Code Online (Sandbox Code Playgroud)

当我尝试调试它时,它的工作正常,但是当我调试一个调用上面相同代码的单元测试用例时,主要问题出现了,而不是在显示"TestProjectRetargetTo35Allowed"的APPSettings的AllKeys中显示"configurationUrl".我还在testcase项目中添加了web.config文件.

任何帮助将不胜感激谢谢.

Jon*_*eim 11

我建议你创建一些抽象层来摆脱对ConfigurationManager的依赖.例如:

public interface IConfigurationReader
{
    string GetAppSetting(string key);    
}

public class ConfigurationReader : IConfigurationReader
{
    public string GetAppSetting(string key)
    {
        return ConfigurationManager.AppSettings[key].ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的单元测试中模拟这个界面.


Ale*_*x23 5

一个简单的解决方法是简单地从 .web 项目中复制 web.config 并粘贴到您的测试项目中,在测试项目中将其重命名为 app.config。

这是非常糟糕的,因为单元测试不应该依赖外部依赖,但仍然是一个修复!

@Jon_Lindeheim 拥有最干净的方法,但是通过抽象到接口,您可以在测试中存根返回值!