C#:什么是System.Configuration.Configuration寻找?

时间:2012-07-09 20:06:23

标签: c#

我有以下测试方法:

[TestMethod]
public void TestHarvestMethod()
{
    HarvestTargetTimeRangeUTC time = new HarvestTargetTimeRangeUTC();
    time.StartTimeUTC = new DateTime(2008, 01, 01, 00, 00, 00, DateTimeKind.Utc);
    time.EndTimeUTC = DateTime.UtcNow;
    XElement lIntelexReport = XElement.Parse(rawXml);
    Harvester target = new Harvester();
    target.ConfigureHarvester((System.Configuration.Configuration)null);  
    var res = target.Harvest(time);
    Console.WriteLine(res);
 }

与此方法结合使用:

public void ConfigureHarvester(System.Configuration.Configuration configuration)
{
    reportId = Int32.Parse(configuration.AppSettings.Settings["IncidentReport"].Value);
}

测试此方法:

public XElement Harvest(HarvestTargetTimeRangeUTC ranges)
{
    XElement lIntelexReport = IntelexServiceCall();  
    return XMLConversion(QueryData(ranges, lIntelexReport));
}

问题是我收到Null Exception错误,指出“对象引用未设置为对象的实例”。在这一行:

reportId = Int32.Parse(configuration.AppSettings.Settings["IncidentReport"].Value);

我几乎是正面的,这是由空值引起的:

target.ConfigureHarvester((System.Configuration.Configuration)null);

上面一行中的System.Configuration是本店常用的一种,但通常用于这样的方法:

public void ConfigureHarvester(System.Configuration.Configuration configuration)
{
    context = new PlannedOutageFactorDataContext();            
}

所以我的reportid字段显然正在寻找除null值之外的其他东西,问题是我不确切知道它正在寻找什么。我已经阅读了System.Configuration的MSDN,但它确实没有帮助。如果有人能指出我正确的方向,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

它正在寻找你传递web.config或app.config值的副本,以便它可以从中提取所需的信息(保存在AppSettings部分中)

例如

<configuration>
    <appSettings>
        <add key="IncidentReport" value="1" />
    </appSettings> 
</configuration>

如果您正在测试网页,很多时候您需要设置网络服务的位置,以便它可以从您的网站获取web.config的副本。

如果您正在开发控制台/桌面应用程序,请确保您有app.config文件

另外,您可以使用

手动传递它
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(exePath);

答案 1 :(得分:2)

在测试程序集中,您需要有一个app.config文件。在这个文件中,你需要一个名为'IncidentReport'的键,它带有一个整数值。