【问题标题】:How to read Web.Config file while Unit Test Case Debugging?单元测试用例调试时如何读取 Web.Config 文件?
【发布时间】:2014-05-07 09:03:23
【问题描述】:

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

即:

<AppSettings>
<add key="configurationUrl" value="http://xx.xx.xx.xx:XXXX/configuration service/configurations"/>

使用以下代码

 reqClient.BaseAddress = System.Configuration.ConfigurationManager.AppSettings["configurationUrl"].ToString();

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

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

【问题讨论】:

  • 也许你正在寻找这个MSDN
  • 配置文件是真实文件系统中存在的真实文件,因此您所做的不是单元测试,而是集成测试。
  • 我想测试我的一个使用配置文件的功能,但总的来说我只占用一个单元。
  • 您可以发布您要测试的代码吗?将值作为参数传递可能更有意义,而不是使单元测试和被测试的代码依赖于您的配置文件。

标签: c# unit-testing web-config


【解决方案1】:

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

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

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

然后你可以在你的单元测试中模拟这个接口。

【讨论】:

  • 抱歉,我必须从 Config 文件中读取的任何其他内容都不是出路,您能告诉我为什么会出现此错误是什么问题
【解决方案2】:

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

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

@Jon_Lindeheim 有最简洁的方法,但是通过抽象为接口,以便您可以在测试中存根返回值!

【讨论】:

  • 这就是我最终做的,不是最好的,但很快。
  • 重命名为app.config 解决了我的问题。谢谢。
【解决方案3】:

问题是您还没有为您的测试项目创建app.config 文件。您创建了一个 web.config 文件,但由于测试项目不是 Web 项目,因此它被完全忽略了。

话虽如此,@Jon_Lindeheim is absolutely right 关于在ConfigurationManager 之上引入一个抽象层。 (ConfigurationManager 是一个外部依赖项,这意味着您的单元测试不仅仅测试 SUT。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2016-11-12
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2021-08-01
    相关资源
    最近更新 更多