【问题标题】:Unit testing where a dependency has a static configuration method C#依赖项具有静态配置方法 C# 的单元测试
【发布时间】:2013-04-02 03:19:52
【问题描述】:

我有一个类继承了一个简单的日志接口。该接口的实现之一使用 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() 方法是否只被调用一次。静态变量和静态方法与作为构造函数一部分的逻辑相结合,让这变得很棘手。

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

【问题讨论】:

    标签: .net unit-testing static log4net


    【解决方案1】:

    可以使用 C#“Static Constructor”来实现您的目标。

    //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);
    }
    

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

    【讨论】:

    • 谢谢,我会调查一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多