mailSettings属性都返回<null> </null>

时间:2013-01-29 12:18:47

标签: c# .net unit-testing configurationmanager

问题

抓取_mailSettings.Smtp.Network.Host时,即使它位于应用程序配置文件中,它也会返回null


代码

首先,因为项目只是一个Class Library,所以我有以下的构建后事件来构建正确命名的配置文件:

copy "$(ProjectDir)App.config" "$(TargetDir)ApplicationSupport.Email.dll.config"

接下来我有一个用于加载配置并使其可用的类:

public class Startup
{
    SmtpSection _smtpSection = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection;

    public string SmtpServer
    {
        get
        {
            if (_smtpSection == null) { return string.Empty; }
            return _smtpSection.Network.Host;
        }
    }

    ...
}

我正试图对它进行单元测试:

[TestMethod]
public void TestStartupSettings()
{
    var sut = new ApplicationSupport.Email.Startup();
    Assert.AreEqual("test.mail.com", sut.SmtpServer);
}

想到 我应该获取数据,因为我已经在应用程序配置文件中配置了这些数据:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <mailSettings>
      <smtp from="somebody@test.com">
        <network host="test.mail.com" defaultCredentials="true" port="25"/>
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

1 个答案:

答案 0 :(得分:0)

由于在ConfigurationManager中使用Class Library存在一些问题,我选择只使用Settings中的Project Properties标签,因为这会生成{{1}我可以简单地复制并粘贴到正在运行的应用程序的app.config的数据文件。

它还允许我轻松地对应用程序进行单元测试。

相关问题