ConfigurationManager ConnectionString抛出错误并返回null

时间:2010-11-29 17:02:01

标签: c#

我完全惊讶于为什么我的一个单元测试失败了。这是一个简单的测试,看看是否返回了正确的连接字符串。我的App.config看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.web>
      <compilation defaultLanguage="c#" debug="true" />
   </system.web>
   <connectionStrings>
      <add name="DbConnectionString" connectionString="Test_HighOnCoding_Db" />
   </connectionStrings>
</configuration>

这是我的简单单元测试,它始终抛出null异常:

[TestFixture]
public class when_retrieving_database_name_from_config
{
    [Test]
    public void should_get_the_correct_database_name()
    {
       var dbName = ConfigurationManager.ConnectionStrings["DbConnectionString"].ConnectionString;

       // dbName is always null 

       Assert.AreEqual("Test_HighOnCoding_Db",dbName); 
    }
 }

2 个答案:

答案 0 :(得分:5)

我的原始答案不适用于您的评论。

我建议检查一件事,然后;你的app.config文件是否被移动到你的程序目录中,并被添加.config重命名为与程序相同的文件?

那么,program.exeprogram.exe.config作为配置文件吗?`

看起来你在这里有一个Web应用程序;如果是这样,您的配置文件应为web.config而不是app.config。然后,您应该使用WebConfigurationManager命名空间中的System.Web.Configuration

答案 1 :(得分:0)

如果您的testdll是MyTests.dll,那么该子项目中的app.config将成为MyTests.dll.config。不幸的是,nunit想要“MyTests.config”(没有“.dll。”)

解决这个问题

  • 为“MyTests”创建一个nunit项目
    • open nunit-gui
    • 在bin文件夹
    • 中创建一个新的nunit项目“MyTests.nunit”
    • 将MyTests.dll添加到MyTests.nunit
    • 保存nunit项目。
    • 退出nunit
  • 将“MyTests.nunit”添加到您的解决方案中
    • 将“MyTests.nunit”复制到项目源。使shure设置
    • buildaction = none
    • 复制到Ouptut Dir =总是
  • 为“MyTests.nunit”创建一个配置文件“MyTests.config”
    • 在项目设置/构建事件/ PostBildEventCommandLine添加
    • copy $(ProjectDir)\ app.config $(TargetDir)\ $(TargetName).config

现在您可以通过打开“MyTests.nunit”

来运行您的unittest