NUnit支持将测试结果保存为xml文件,于是就产生了针对其文件产生报表的一些工具。目前普遍为人所接受的转报表工具是NUnit2Report task,这个开源组件是和NAnt集成的,你要把他跑起来得用NAnt以及相应的配置文件,这种设计的出发点是基于NAnt的自动构建,生成相应的报表。

很多像我一样的windows程序员,习惯了集成,习惯于一个工具撒都搞定,不是很有耐心去配置相应的东西,我们希望我跑完一个测试就可以得到报表,用来分析,存档和共享。既然这样,我们就把NUnit2Report整合到我们的NUnit里去吧^_^ !

感谢开源,很轻松地得到了NUnit2Reportdll,源码和相关文档。一开始,我一看是个dllsdk里又有介绍,就直接拿来用了,由于是为Nant设计的,所以还必须添加nant.core.dll的引用。里面就一个类NUnit2ReportTask,我设置了输入用的NUnit测试结果文件TestResults.xml,就运行Execute,程序报错,说Nant.core里面出错,晕,我又把很多Nant.*文件引用进来,还是报错。

没办法了,我还是直接用源文件吧,看看哪里出错了。由于NP是为Nant设计的,因此NUnit2ReportTask这个类派生于Task,通过覆写成员函数实现自定义操作,我看了些Task类的Excecute方法的源码,发现原先报出的异常应该与Nant里的一些成员变量有关,而且里面只是些异常捕捉和事件处理,没有太特别的地方,于是就把NUnit2ReportTask里面真正工作的ExecuteTask()方法提取出来,作为公共方法进行调用,然后也把初始化方法也在这里面调用,经过几次尝试,终于可以输出报表了!

就这样整合进去也不是很爽,NAnt没什么用还得带着它,于是我又对代码进行了一番改造,去”NAnt”化!把相关的派生和类型都进行了替换,使其与Nant毫无关系^_^。改造后的源码后面会一并放出。

NP改造完成了,就该整合到NUnit中了,我们在NUnitTools菜单下加了一个菜单

 


然后把改造后的
NP源文件放入Nuit.gui的项目中,添加事件处理函数,内部代码如下:

TestResult result = this._testLoader.Results[0];

string fileName = Path.Combine(new FileInfo(this._testLoader.TestFileName).Directory.FullName,"TestResult.xml");              

              XmlResultVisitor resultVisitor 
= new XmlResultVisitor( fileName, result);

              result.Accept(resultVisitor);

              resultVisitor.Write();

              NUnit2Report report 
= new NUnit2Report();

              report.NUnitResultXml 
= fileName;

              report.Todir 
= new FileInfo(this._testLoader.TestFileName).Directory.FullName;

              report.OutFilename 
= string.Format("{0}.html",result.Name); 

              report.HasFormat 
= true;

              report.BuildReport();

          System.Diagnostics.Process.Start(Path.Combine(report.Todir,report.OutFilename));

                      


在上面这段代码中,我们先用nunit自带的功能生成了一个测试结果的xml文件,然后将其作为参数输入NP中,将html报表输出到被测dll的目录下,并以其测试名称命名文件,自动打开此文件。

运行一个测试,点击菜单按钮,浏览器中效果如下:

 


经过努力,
Nunit终于可以自动生成报表了,看到我的Nunit越来越强大,内心真是喜悦啊^_^

在后面的文章中,我会为Nunit添加更加强大的功能。

posted on 2006-03-26 20:33  sharpedge  阅读(3145)  评论(5编辑  收藏  举报