0

問題

を取得する_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>
4

1 に答える 1

0

ConfigurationManagerの使用にはいくつかの問題があるため、たとえば、実行中のアプリケーションのに簡単にコピーして貼り付けることができるデータを含むファイルが生成されるため、のタブをClass Library使用することにしました。SettingsProject Propertiesapp.configweb.config

また、アプリケーションを簡単に単体テストすることもできます。

于 2013-01-29T16:17:50.323 に答える