首先,在不久的将来,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 接口了。