gpt4 book ai didi

asp.net - 单元测试和 Log4net

转载 作者:行者123 更新时间:2023-12-03 22:52:31 25 4
gpt4 key购买 nike

我在 Controller 中对一个 Action 进行了单元测试,该 Action 写入 log4net。

当我运行我的操作时,它运行良好 - 写入 log4net 。

但是,当我运行单元测试时 - 该操作不会写入 log4net,但不会引发任何异常。

有没有人有办法解决吗?

最佳答案

Log4net 不抛出异常:http://logging.apache.org/log4net/release/faq.html

在单元测试中写入磁盘或数据库中的日志会适得其反;重点是自动化。您不必每次运行测试时都检查日志。

如果您确实需要验证是否进行了调用以记录某些内容,则应模拟 ILog接口(interface)并断言调用了适当的方法。

如果您使用的是模拟框架,这很简单。如果不是,您可以创建一个 TestLogger实现或部分实现 ILog 的类并公开显示给定方法被调用次数的额外属性。您的断言将检查方法是否按预期调用。

这是要测试的类的示例:

  public class MyComponent
{
private readonly ILog _log;

public MyComponent(ILog log)
{
_log = log;
}

public string DoSomething(int arg)
{
_log.InfoFormat("Argument was [{0}]", arg);
return arg.ToString();
}
}

和测试(使用 Rhino.Mocks 模拟 ILog):
[TestClass]
public class MyComponentTests
{
[TestMethod]
public void DoSomethingTest()
{
var logger = MockRepository.GenerateStub<ILog>();
var component = new MyComponent(logger);

var result = component.DoSomething(8);

Assert.AreEqual("8", result);
logger.AssertWasCalled(l => l.InfoFormat(Arg<string>.Is.Anything, Arg<int>.Is.Equal(8)));
}
}

关于asp.net - 单元测试和 Log4net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8162919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com