从Nunit获取失败测试列表

问题描述:

我有一个包含8000多个测试的测试套件,它很难看到代码更改(这些测试案例是从一些日志文件中自动提取的查询)之间破坏的测试。从Nunit获取失败测试列表

是否有一种简单的方法来获取NUnit运行失败测试列表?理想情况下,我想比较哪些测试受到影响。

+3

您是否尝试过使用一些持续集成工具,TeamCity的?它使得这很容易 – 2012-07-11 21:13:48

+0

谢谢,我也会试一试。目前,实现一个事件监听器完成了这项工作。 – 2012-07-12 19:24:28

您可以实现'NUnit.Core.Extensibility.IAddin'和'NUnit.Core.EventListener'。所以你可以操纵你的测试结果。 NUnit(2.5或更高版本)将自动加载实现“IAddin”方法的类。

就像是:

using System; 
using System.Text; 
using NUnit.Core.Extensibility; 
using NUnit.Core; 

namespace YourNUnitAddIns 
{ 
    /// <summary> 
    /// Coleta informacoes da execucao do NUnit. 
    /// </summary> 
    [NUnitAddin(
     Name="CollectNUnitFailAddIn", 
     Description="do something", 
     Type=ExtensionType.Core)] 
    public class CollectNUnitFailAddIn : IAddin, EventListener 
    { 
     #region IAddin Members 

     public bool Install(IExtensionHost host) 
     {  
      IExtensionPoint suiteBuilders = host.GetExtensionPoint("SuiteBuilders"); 
      IExtensionPoint testBuilders = host.GetExtensionPoint("TestCaseBuilders"); 
      IExtensionPoint events = host.GetExtensionPoint("EventListeners"); 

      if (events == null) 
       return false; 

      events.Install(this); 

      return true; 
     } 

     #endregion 

     #region EventListener Members 

     public void RunFinished(Exception exception) 
     { 
      //do something here. 
     } 

     public void RunFinished(TestResult result) 
     { 
      //do something here. 
     } 

     public void RunStarted(string name, int testCount) 
     { 
      //do something here. 
     } 

     public void SuiteFinished(TestResult result) 
     { 
      //do something here. 
     } 

     public void SuiteStarted(TestName testName) 
     { 
      //do something here. 
     } 

     public void TestFinished(TestResult result) 
     { 
      //do something here. 
     } 

     public void TestOutput(TestOutput testOutput) 
     { 
      //do something here. 
     } 

     public void TestStarted(TestName testName) 
     { 
      //do something here. 
     } 

     public void UnhandledException(Exception exception) 
     { 
      //do something here. 
     } 

     #endregion 
    } 
} 

你应该能够得到从NUnit的的XML输出一个简单的XSLT转换的结果。

像CruiseControl这样的持续集成工具已经为此创建了XSLT转换。

https://github.com/ccnet/CruiseControl.NET/blob/master/project/xsl/AlternativeNUnitDetails.xsl