代码之家  ›  专栏  ›  技术社区  ›  azamsharp

ConfigurationManager ConnectionString引发错误并返回空值

c#
  •  1
  • azamsharp  · 技术社区  · 14 年前

    我对我的一个单元测试失败的原因完全震惊。查看是否返回正确的connectionString是一个简单的测试。我的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>
    

    下面是我的简单单元测试,它总是抛出空异常:

    [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); 
        }
     }
    
    3 回复  |  直到 9 年前
        1
  •  5
  •   Andrew Barber Tejas Tank    14 年前

    根据您下面的评论,我的原始答案不适用。

    那么,有一件事我建议你检查一下,是吗? app.config 文件将随程序移动到目录中,并重命名为与程序相同的文件,是否添加了.config?

    所以, program.exe program.exe.config 作为配置文件?`

    这里看起来您有一个Web应用程序;如果有,您的配置文件应该是 web.config 而不是 App.CONFIG . 那么,你应该使用 WebConfigurationManager System.Web.Configuration 命名空间。

        2
  •  1
  •   majikandy    9 年前

    这是一个简单的修复——将app.config放到测试项目中。

    因为您是从测试中运行的,所以app.config需要在测试项目中,而不是在实际的程序项目中。

    执行测试时,正在运行的应用程序的上下文来自测试程序集,因此configurationmanager.connectionStrings将仅在测试项目bin文件夹中查找rtestassembly.dll.config(它是由测试项目文件夹中的app.config自动生成的)。

        3
  •  0
  •   k3b    14 年前

    如果您的testdll是mytests.dll,则该子项目中的app.config将成为mytests.dll.config。不幸的是,nunit想要“mytests.config”(不带“.dll”)。

    解决这个问题

    • 为“mytests”创建一个nunit项目
      • 开放式单元GUI
      • 在bin文件夹中新建一个nunit项目“mytests.nunit”
      • 将mytests.dll添加到mytests.nunit
      • 保存Nunit项目。
      • 退出单元
    • 在解决方案中添加“mytests.nunit”
      • 将“mytests.nunit”复制到项目源。使舒尔的设置
      • buildAction=无
      • copy to ouptut dir=始终
    • 为“mytests.nunit”创建一个configfile“mytests.config”
      • 在“项目设置/生成事件/Postbildeventcommandline添加”下
      • 复制$(projectdir)\app.config$(targetdir)\$(targetname.config

    现在您可以通过打开“mytests.nunit”来运行UnitTest。