0

我有一个继承简单日志接口的类。此接口的实现之一使用 log4net。

Log4net 有一个静态配置方法,需要在您使用 XML 配置时调用。该行是:

log4net.Config.XmlConfigurator.Configure();

文档通常声明将其放入全局事件中,但我想将所有 log4net 代码封装到这一类中。所以我只是使用静态变量来跟踪 log4net 是否已配置,如果没有,我调用此方法:

//This is static as I only ever want one instance
private static log4net.ILog _logger;
private static bool _isConfigured;

public Log4NetLogger() {
    if(!_isConfigured) {
        //This is needed to initialise the Log4Net logger
        log4net.Config.XmlConfigurator.Configure();
        _isConfigured = true;
        _logger = log4net.LogManager.GetLogger(_defaultLogger);
    }
}

问题是我不知道如何测试这个。我希望能够测试 Configure() 方法是否只被调用一次。静态变量和静态方法与作为构造函数一部分的逻辑相结合,使得这很棘手。

感觉是我的代码很差,有没有办法可以编写此代码,以便配置调用只调用一次,然后,我该如何测试它?

4

1 回答 1

0

可以使用 C#“静态构造函数”来实现您的目标。

//This is static as I only ever want one instance
private static log4net.ILog _logger;

static Log4NetLogger() {
    //This is needed to initialise the Log4Net logger
    log4net.Config.XmlConfigurator.Configure();
    _logger = log4net.LogManager.GetLogger(_defaultLogger);
}

由于按照规范,它最多运行一次(每个应用程序域),因此您不需要对其进行测试。但是,您必须更仔细地处理异常,因为静态构造函数中的错误更难理解。

于 2013-04-02T03:50:55.227 回答