我正在对一个使用app.config文件加载配置属性的.NET应用程序(.exe)进行单元测试。单元测试应用程序本身没有app.config文件。
当我尝试对使用任何配置属性的方法进行单元测试时,它们返回null。我假设这是因为单元测试应用程序不会加载到目标应用程序的app.config中。
有没有办法覆盖它,或者我是否必须编写一个脚本来将目标app.config的内容复制到本地app.config?
This帖子提出了这个问题,但作者实际上是从与我不同的角度来看待这个问题的
编辑:我应该提一下,我正在使用VS08 Team System进行单元测试。
发布于 2008-12-05 15:16:23
最简单的方法是在单元测试的deployment部分中添加.config
文件。
为此,请从解决方案项中打开.testrunconfig
文件。在Deployment部分中,从项目的构建目录(假设是bin\Debug
)添加输出.config
文件。
在运行测试之前,deployment部分中列出的所有内容都将被复制到测试项目的工作文件夹中,因此依赖于配置的代码将运行良好。
编辑:我忘了添加,这并不是在所有情况下都有效,所以您可能需要包含一个启动脚本来重命名输出.config
以匹配单元测试的名称。
发布于 2009-10-06 22:27:26
在Visual Studio2008中,我将app.config
文件作为现有项添加到测试项目中,并选择了copy as link,以确保它不会被复制。这样,我的解决方案中只有一份副本。有了几个测试项目,它就派上用场了!
发布于 2008-12-05 15:43:18
无论您使用的是Team System测试还是NUnit,最佳做法都是为您的测试创建单独的类库。只需将App.config添加到测试项目中,编译时就会自动将其复制到bin文件夹中。
如果您的代码依赖于特定的配置测试,那么我编写的第一个测试就是验证配置文件是否可用(这样我就知道我并没有疯):
<configuration>
<appSettings>
<add key="TestValue" value="true" />
</appSettings>
</configuration>
测试:
[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());
}
}
https://stackoverflow.com/questions/344069
复制相似问题