C# log4net和nunit测试,最基本的例子
我想尝试从我的应用记录一些应用消息。在这种情况下,我只想强制nunit使用log4net。我在这里找到了一些例子 log4net在app.config中被混淆如下:C# log4net和nunit测试,最基本的例子,c#,tdd,nunit,log4net,C#,Tdd,Nunit,Log4net,我想尝试从我的应用记录一些应用消息。在这种情况下,我只想强制nunit使用log4net。我在这里找到了一些例子 log4net在app.config中被混淆如下: [TestFixture] class DomainTests { protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests)); public void LoggingTests() {
[TestFixture]
class DomainTests
{
protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests));
public void LoggingTests()
{
log4net.Config.XmlConfigurator.Configure();
}
[Test]
public void BasicLogTest()
{
log.Error("write my log entry already");
}
[SetUp]
RunBeforeAnyTests()
{
BasicConfigurator.Configure();
}
[TearDown]
RunAfterAnyTests()
{
// ...
}
在我的测试中,代码如下所示
[TestFixture]
class DomainTests
{
protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests));
public void LoggingTests()
{
log4net.Config.XmlConfigurator.Configure();
}
[Test]
public void BasicLogTest()
{
log.Error("write my log entry already");
}
我的测试通过了,但log.txt文件中没有写入任何内容。我做错了什么?我只想使存储消息尽可能简单,比如输入应用程序、退出应用程序。问候。我最好的猜测是你可以这样做:
[TestFixture]
class DomainTests
{
protected static readonly ILog log = LogManager.GetLogger(typeof(DomainTests));
public void LoggingTests()
{
log4net.Config.XmlConfigurator.Configure();
}
[Test]
public void BasicLogTest()
{
log.Error("write my log entry already");
}
[SetUp]
RunBeforeAnyTests()
{
BasicConfigurator.Configure();
}
[TearDown]
RunAfterAnyTests()
{
// ...
}
我也会使用Log4Net.config文件而不是app.config文件,它看起来更干净。下面是一个示例log4net.config文件:
问题在于NUnit测试运行程序(在visual studio中从resharper运行时)从另一个文件夹运行测试(它会卷影复制测试程序集),因此除非指定完整配置路径,否则xml配置在该点不可用 当然,您可以使用基本配置并在代码中指定日志记录配置,如:
log4net.Config.BasicConfigurator.Configure(
new log4net.Appender.ConsoleAppender {
Layout = new log4net.Layout.SimpleLayout()});
之后,您应该在测试输出中看到日志输出。您可以调整单元测试以检查文件本身(而不是手动检查)。请注意存储在环境变量中的文件路径。这也适用于TeamCity测试跑步者(无需硬编码路径) 配置:
代码:
只要我知道并将log4net与nunit一起使用,我从未使用过任何配置文件,您只需要在测试类构造函数中添加以下行
BasicConfigurator.Configure();
如果您想查看示例测试类,Log4Net是否正常工作?我问这个问题的原因是,我想知道我们是否需要检查您的Log4Net加载过程……另外,为了节省您每次使用这个来在类之间复制/粘贴日志时键入类名:private static readonly ILog Logger=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);你的意思是它如何正常工作?:)我将log4net引用添加到我的测试项目中,其余的代码发布在这里,在运行测试或构建prj时没有给出错误消息。@Vijay,我需要一些使用nunit和app.config进行日志记录的具体示例,如果你已经有一些东西要检查的话。这个log.txt位于哪里?我已经复制了您的代码,并在app.config中指定了c:\log.txt,然后它就可以正常工作了。请尝试指定log.txt的完整路径