Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 让NUnit控制台在每次测试后的测试运行期间报告测试结果_C#_Nunit_Nunit Console - Fatal编程技术网

C# 让NUnit控制台在每次测试后的测试运行期间报告测试结果

C# 让NUnit控制台在每次测试后的测试运行期间报告测试结果,c#,nunit,nunit-console,C#,Nunit,Nunit Console,我在我的测试程序集上运行NUnit控制台,但有时NUnit崩溃(我目前正在弄清楚原因)。当nunit崩溃时,不会创建任何xml报告,我实际上没有任何测试报告。测试运行时间很长,如果我丢失了整个测试运行报告,情况会很糟糕。 是否有一种方法可以告诉NUNit在运行时(在每次测试之后)编写xml日志文件。即使这意味着xml文件无法正确关闭。 我知道可以使用NUnit TestListener。但是是否有一个开关或不包括自己编写额外代码的东西。您可以使用/labels命令行开关调用nunit conso

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

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


唯一的另一个选择是您已经打折的,即编写自己的
EventListener
实现。有点轻,但如果您改变主意,应该足以让您开始使用。

首先,在不久的将来,NUnit将提供这种开箱即用的日志记录功能-此功能已经被请求过了。

在完成之前,我们需要编写一些自定义代码,如果您使用NUnit<3.x,则非常简单:
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 addin:

[NUnitAddin]
public class ProgressReporterNugetAddin : IAddin
{
    public bool Install(IExtensionHost host)
    {
        var listeners = host.GetExtensionPoint("EventListeners");
        listeners.Install(new ProgressReporterEventListener());
        return true;
    }
}
注意:有一篇非常好的文章介绍了类似的方法和更多内容。
不幸的是,它只适用于NUnit<3.x,因为NUnit3被大量重写-例如,不再有EventListener接口