【发布时间】:2012-03-07 20:36:28
【问题描述】:
我想知道在 NUnit 项目中初始化 log4Net 的最佳方法是什么。当然,我想尽快调用初始化代码(即XmlConfigurator.Configure())以获得尽可能多的早期日志输出。但是由于我的项目是通过 NUnit 运行的,所以我几乎无法控制它的入口点。
根据 NUnit 文档,它应该首先调用一些构造函数,然后在标有 [TestFixtureSetup] 的类中调用标有 [SetUp] 属性的方法。
所以,首先,我创建了一个静态助手类,我可以毫无问题地多次调用它。
public static class LoggingFacility
{
private static bool _loggerIsUp = false;
public static void InitLogger()
{
if (_loggerIsUp == false)
XmlConfigurator.ConfigureAndWatch(f);
_loggerIsUp = true;
}
}
然后,我让我所有的[TestFixtureSetup] 都继承了一个,除了调用LoggingFacility.initLogger() 之外几乎什么都不做。但这仍然留下了之前运行的所有构造函数,我只能假设随机的顺序。而且,它可能会在我能够执行一些代码之前进行一些静态初始化。
事实上,正如我在日志中看到的那样,执行的前 4 秒左右完全没有记录。
这是否意味着我必须在每个构造函数中调用我的InitLogger() 并禁止使用任何静态初始化程序?这是一项艰巨的工作!
有人知道这个魔术吗?
【问题讨论】:
-
只是想知道您在测试中使用 log4net 的目的是什么,记录测试进度/结果或将记录器实例化为某些类的依赖项?
-
@sll:我使用两个日志输出:第一个用于测试输出比 NUnit 本身更详细一点,第二个(我需要快速准备好)用于调试测试应用
标签: c# nunit log4net nunit-2.5