我需要测试类型的方法void
,它只是使用 LOG 框架在我的 LOG 变量上插入一条消息(Serilog https://serilog.net/).
参见实现示例:
public class MyClass
{
public MyClass(ILogger<IProcess> logger)
{
this.logger = logger;
}
private readonly ILogger logger;
//...Anothers methods...
public void LogInit(Guid processId, string folder, string[] args)
{
var myObject = new
{
ProcessId = processId,
Folder = folder,
Arguments = args
};
this.logger.LogWarning("{@myObject}", myObject);
}
}
在这种情况下,我们需要创建一个测试LogInit (...)
这个方法真的需要测试吗?或者更确切地说,它的存在有意义吗?
我正在读一些关于:
“如果你的方法没有副作用,并且不返回任何内容,那么它就没有做任何事情。”
在这种情况下,该方法只是“单独”创建,以维护代码的组织并进一步分离类的职责。
这就说得通了?
EDIT:@彼得邦斯
我们无权访问接口中注册的消息(logger
), 喜欢:this.logger.GiveMeWarningLogs()
...
如果您使用 Serilog,则可以使用测试相关器接收器 https://github.com/MitchBodmer/serilog-sinks-testcorrelator查看方法调用产生了哪些日志事件。
[TestMethod]
public void A_test()
{
var myClass = new MyClass(new LoggerConfiguration().WriteTo.TestCorrelator().CreateLogger());
using (TestCorrelator.CreateContext())
{
myClass.LogInit();
TestCorrelator.GetLogEventsFromCurrentContext()
.Should().ContainSingle()
.Which.MessageTemplate.Text
.Should().Be("{@myObject}");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)