当前位置:  开发笔记 > 编程语言 > 正文

单元测试项目可以加载目标应用程序的app.config文件吗?

如何解决《单元测试项目可以加载目标应用程序的app.config文件吗?》经验,为你挑选了6个好方法。

我正在测试使用app.config文件加载配置属性的.NET应用程序(.exe).单元测试应用程序本身没有app.config文件.

当我尝试对使用任何配置属性的方法进行单元测试时,它们返回null.我假设这是因为单元测试应用程序不会加载到目标应用程序的app.config中.

有没有办法覆盖这个或我是否必须编写脚本将目标app.config的内容复制到本地app.config?

这篇帖子有点问这个问题,但作者真的从一个不同的角度来看待它.

编辑:我应该提一下,我正在使用VS08 Team System进行单元测试.



1> 小智..:

在Visual Studio 2008中,我将app.config文件作为现有项目添加到测试项目中,并将选定的副本添加为链接,以确保它不会重复.这样我在我的解决方案中只有一个副本.有几个测试项目,它真的很方便!

添加现有项目

添加为链接


完美的答案,简单而客观!+1
要添加现有项目"作为链接",您应该:"在添加现有项目对话框中,找到并选择要链接的项目项目",然后:"从打开按钮下拉列表中,选择添加为链接. "
这是最好的解决方案,应该标记为答案.

2> Jeromy Irvin..:

最简单的方法是.config在单元测试的部署部分添加文件.

为此,请.testrunconfig从"解决方案项"中打开该文件.在"部署"部分中,添加.config项目构建目录中的输出文件(可能bin\Debug).

在运行测试之前,部署部分中列出的任何内容都将被复制到测试项目的工作文件夹中,因此您的配置相关代码将正常运行.

编辑:我忘了添加,这在所有情况下都不起作用,因此您可能需要包含一个启动脚本,该脚本重命名输出.config以匹配单元测试的名称.


你不能只添加一个非复制引用吗?(添加现有项目......)
对于EFraim的解决方案:请务必使用命令按钮中的"添加为链接".否则你仍然得到一份副本.此外,虽然问题是专门针对.Net应用程序,但这不适用于Web应用程序,因为Web应用程序的配置名称错误(Web.Config,而不是App.Config)
@Rowland如果你这样做,你必须保留两份app.config.我宁愿花10秒钟,使用.testrunco​​nfig工具,而不是记得在两个地方更新app.config.
将app.config文件添加到测试项目中要容易得多 - 然后根本不需要使用.testrunco​​nfig.
EFraim的评论应该是公认的答案,这比其他任何事情都简单得多.
EFraim的答案不是正确的答案.原因如下:在单元测试条件下,您可能希望设置不是发布的默认设置.如果您只是为了测量单元测试的响应而调整默认设置,那么您可能会忘记在以后发布时撤消这些设置.恕我直言,这很糟糕.单元测试应该有自己的副本,您应该根据单元测试目标系统地更改或更新这些设置.

3> bryanbcook..:

无论您是使用Team System Test还是NUnit,最佳做法是为您的测试创建单独的类库. 在编译时,只需将App.config添加到Test项目,就会自动复制到bin文件夹中.

如果你的代码依赖于特定的配置测试,那么我要编写的第一个测试验证配置文件是否可用(这样我知道我不是疯了):


   
       
   

而且测试:

[TestFixture]
public class GeneralFixture
{
     [Test]
     public void VerifyAppDomainHasConfigurationSettings()
     {
          string value = ConfigurationManager.AppSettings["TestValue"];
          Assert.IsFalse(String.IsNullOrEmpty(value), "No App.Config found.");
     }
}

理想情况下,您应该编写代码,以便将配置对象传递到类中.这不仅可以将您从配置文件问题中分离出来,还可以为不同的配置方案编写测试.

public class MyObject
{
     public void Configure(MyConfigurationObject config)
     {
          _enabled = config.Enabled;
     }

     public string Foo()
     {
         if (_enabled)
         {
             return "foo!";
         }
         return String.Empty;
     }

     private bool _enabled;
}

[TestFixture]
public class MyObjectTestFixture
{
     [Test]
     public void CanInitializeWithProperConfig()
     {
         MyConfigurationObject config = new MyConfigurationObject();
         config.Enabled = true;

         MyObject myObj = new MyObject();
         myObj.Configure(config);

         Assert.AreEqual("foo!", myObj.Foo());
     }
}


我同意在这里传递配置依赖的精神,这似乎已经得到Mark Seemann的回答了!在这里:[由于缺少.config文件而导致单元测试失败](http://stackoverflow.com/questions/7288859/ways-of-keeping-configuration-code-out-of-logic-code-using-dependency-injection )

4> Antti..:

如果您有一个包含例如Web应用程序和测试项目的解决方案,您可能希望测试项目使用Web应用程序的web.config.

解决此问题的一种方法是将web.config复制到测试项目并将其重命名为app.config.

另一个更好的解决方案是修改构建链并使其自动复制web.config以测试项目输出目录.为此,请右键单击"测试应用程序"并选择属性.现在您应该看到项目属性.单击"构建事件",然后单击"编辑构建后..."按钮.写下面的行到那里:

copy "$(SolutionDir)\WebApplication1\web.config" "$(ProjectDir)$(OutDir)$(TargetFileName).config"

然后单击确定.(注意,您可能需要更改WebApplication1,因为您要测试项目名称).如果你有错误的web.config路径,那么复制失败,你会发现在不成功的构建过程中.

编辑:

要从当前项目复制到测试项目:

copy "$(ProjectDir)bin\WebProject.dll.config" "$(SolutionDir)WebProject.Tests\bin\Debug\App.Config"



5> MichaelChan..:

这有点旧,但我找到了更好的解决方案.我在这里尝试选择的答案,但看起来像.testrunco​​nfig已经过时了.

1.对于单元测试,包装配置是一个接口(IConfig)

对于单元测试,配置确实不应该是你的测试的一部分,所以创建一个你可以注入的模拟.在这个例子中我使用的是Moq.

Mock _configMock;
_configMock.Setup(config => config.ConfigKey).Returns("ConfigValue");
var SUT = new SUT(_configMock.Object);
2.对于Integration测试,动态添加所需的配置
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if(config.AppSettings.Settings[configName] != null)
{
    config.AppSettings.Settings.Remove(configName);
}
config.AppSettings.Settings.Add(configName, configValue);
config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection("appSettings");



6> Hari Das..:

这很容易。

右键单击您的测试项目

添加->现有项目

您可以在“添加”按钮旁边看到一个小箭头

选择配置文件,单击“添加为链接”

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有