平常我会用Visual Stuido的测试项目,写一些自动化测试,如单元测试、整合测试等等,受测的Code中有很多地方用NLog记录消息,在正试的环境,会写到数据库,但测试时我会想把消息输出到每一个测试的结果中,除了节省数据库外,也比较容易追纵错误消息。
平常我会用Visual Stuido的测试项目,写一些自动化测试,如单元测试、整合测试等等,受测的Code中有很多地方用NLog记录消息,在正试的环境,会写到数据库,但测试时我会想把消息输出到每一个测试的结果中,除了节省数据库外,也比较容易追纵错误消息。
NLog配置文件
是.Net中很热门的Log记录,使用与设定都很简单,这里说明一下测试项目需要的配置文件,我的习惯是写成独立的文件,不过也可以写到web.config、app.config中
注意我的type是用Console,为什么呢?
因为Visual Studio的测试支持将
- System.Console
- System.Diagnostics.Trace
- System.Diagnostics.Debug
这三个Class在测试时,所Write的消息都会写到测试结果中,而为什么不用NLog的DebugTarget或Trace Target呢,因为NLog的
Debug是用StringBuilder记录,不会输出到测试结果中。
Trace会输出到测试结果中,只是NLog消息大于Error会引发Trace.Fail,会跳出侦错对话框,使得自动化测试中断。
图一 Trace.Fail的侦错话框
Note:
NLog的Targets有AspNet,AspResponse,Chainsaw,ColoredConsole,Console,Database,Debug,Debugger,EventLog,File,FormControl,LogReceiverService,Mail,Memory,MessageBox,MethodCall,MSMQ,Network,NLogViewer,Null,OutputDebugString,PerfCounter,RichTextBox,Trace,WebService等25种,测试过还是Console在测试时比较好用。
?
文件属性
文件的属性用设成如下
?
图二 文件属性
测试
写个简单的Code来测测看结果吧
public class Sample { private static Logger logger = LogManager.GetCurrentClassLogger(); public void Foo() { logger.Trace("Start"); //================ logger.Trace("tDo Something"); //================ logger.Trace("End"); } } [TestMethod] public void FooTest() { var sample = new Sample(); sample.Foo(); }
图3 NLog输出到测试结果
原文:大专栏 [小技巧]自动化测试时NLog的消息输出到测试结果中