首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >单元测试项目可以加载目标应用程序的app.config文件吗?

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

Stack Overflow用户
提问于 2008-12-05 15:01:36
回答 11查看 148.2K关注 0票数 164

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

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

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

This帖子提出了这个问题,但作者实际上是从与我不同的角度来看待这个问题的

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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-12-05 15:16:23

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

为此,请从解决方案项中打开.testrunconfig文件。在Deployment部分中,从项目的构建目录(假设是bin\Debug)添加输出.config文件。

在运行测试之前,deployment部分中列出的所有内容都将被复制到测试项目的工作文件夹中,因此依赖于配置的代码将运行良好。

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

票数 64
EN

Stack Overflow用户

发布于 2009-10-06 22:27:26

在Visual Studio2008中,我将app.config文件作为现有项添加到测试项目中,并选择了copy as link,以确保它不会被复制。这样,我的解决方案中只有一份副本。有了几个测试项目,它就派上用场了!

票数 125
EN

Stack Overflow用户

发布于 2008-12-05 15:43:18

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

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

代码语言:javascript
复制
<configuration>
   <appSettings>
       <add key="TestValue" value="true" />
   </appSettings>
</configuration>

测试:

代码语言:javascript
复制
[TestFixture]
public class GeneralFixture
{
     [Test]
     public void VerifyAppDomainHasConfigurationSettings()
     {
          string value = ConfigurationManager.AppSettings["TestValue"];
          Assert.IsFalse(String.IsNullOrEmpty(value), "No App.Config found.");
     }
}

理想情况下,您应该编写代码,以便将配置对象传递到类中。这不仅将您从配置文件问题中分离出来,而且还允许您为不同的配置场景编写测试。

代码语言:javascript
复制
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());
     }
}
票数 56
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/344069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档