【问题标题】:Having NUnit console report test results during the test run, after each test在每次测试之后,让 NUnit 控制台在测试运行期间报告测试结果
【发布时间】:2014-02-27 13:36:45
【问题描述】:

我在我的测试程序集上运行 NUnit 控制台,但有时我的 NUnit 崩溃(我目前正在找出原因)。当 nunit 崩溃时,没有创建 xml 报告,我实际上没有任何测试报告。试运行时间很长,如果我丢失了整个试运行报告,情况就很糟糕。 有没有办法告诉 NUIt 在运行时(每次测试后)写入 xml 日志文件。即使这意味着 xml 文件不会正确关闭。 我知道可以使用 NUnit TestListener。但是是否有一个开关或其他不包括自己编写额外代码的东西。

【问题讨论】:

    标签: c# nunit nunit-console


    【解决方案1】:

    您可以使用/labels 命令行开关调用nunit-console。这将导致它在运行时将每个测试的(完全限定的)名称写入控制台,尽管输出不包括测试结果。但是,它会显示哪些测试已成功运行。

    唯一的其他选择是您打折的选择,即编写自己的EventListener 实现。 The documentation about that interface 有点轻,但如果您改变主意,the NUnit documentation about writing an NUnit add-in assembly 应该足以让您开始。

    【讨论】:

      【解决方案2】:

      首先,在不久的将来,NUnit 将提供开箱即用的日志记录 - 已请求此功能 - Write partial results XML as tests happen instead of at the end

      在完成之前,我们需要编写一些自定义代码,如果您使用 NUnit 1)您需要创建一个实现EventListener接口的事件监听器
      2)该接口为测试执行的不同状态提供通知,例如。 RunStarted、RunFinished 或 TestFinished。您所需要做的只是实现与您的案例相关的日志记录。我的代码片段:

       public void RunStarted(string name, int testCount)
       {
           try
           {
               _instanceId = Environment.GetEnvironmentVariable("InstanceId");
               _buildId = Environment.GetEnvironmentVariable("BuildId");
               _browser = Environment.GetEnvironmentVariable("BrowserToTest");
               _template = Environment.GetEnvironmentVariable("TemplateToTest");
           }
           catch { }
       }
      
       public void TestFinished(TestResult result)
       {
           if (result.ResultState == ResultState.Ignored)
           {
               return;
           }
           var r = new TestingWorkerData
           {
               BuildId = _buildId,
               InstanceId = _instanceId,
               TestName = result.FullName,
               Success = result.IsSuccess,
               TimeTaken = result.Time.ToString(CultureInfo.InvariantCulture),
               Message = result.Message,
               StackTrace = result.StackTrace,
               Browser = _browser,
               Template = _template
           };         
           File.AppendAllLines(@"z:\\results.txt", new[] {JsonConvert.SerializeObject(r)});
       }
      
       public class TestingWorkerData
       {
           public string TestName { get; set; }
           public bool Success { get; set; }
           public string TimeTaken { get; set; }
           public string Message { get; set; }
           public string StackTrace { get; set; }
           public string InstanceId { get; set; }
           public string Browser { get; set; }
           public string Template { get; set; }
           public string BuildId { get; set; }
       }
      

      3)最后一件事是创建 NUnit 插件:

      [NUnitAddin]
      public class ProgressReporterNugetAddin : IAddin
      {
          public bool Install(IExtensionHost host)
          {
              var listeners = host.GetExtensionPoint("EventListeners");
              listeners.Install(new ProgressReporterEventListener());
              return true;
          }
      }
      

      注意:有一篇很好的文章 http://jimmykeen.net/2015/02/28/logging-test-results-with-nunit/ 涵盖了类似的方法以及更多内容。
      不幸的是,它适用于 NUnit ,因为 NUnit3 被大量重写 - 例如。没有 EventListener 接口了。

      【讨论】:

        猜你喜欢
        • 2019-08-07
        • 2012-03-08
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        • 2014-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多