in TeamCity.VSTest.TestLogger/MessageHandler.cs [44:125]
public void OnTestResult(TestResultEventArgs? ev)
{
if (ev == null)
{
return;
}
var result = ev.Result;
var testCase = result.TestCase;
// For data-driven tests which don't usually have a unique display name
// before execution is better to use display name from the test run result rather that from testCase.
// It makes a display name enriched with test parameters what makes test display name unique
var displayName = _options.UseTestResultDisplayName && !IsNullOrWhiteSpace(result.DisplayName) ? result.DisplayName : testCase.DisplayName;
var suiteName = _suiteNameProvider.GetSuiteName(testCase.Source);
var testName = _testNameProvider.GetTestName(testCase.FullyQualifiedName, displayName);
if (string.IsNullOrEmpty(testName))
{
testName = testCase.Id.ToString();
}
if (!string.IsNullOrEmpty(suiteName))
{
testName = suiteName + ": " + testName;
}
using (_eventRegistry.Register(new TestEvent(suiteName, ev.Result.DisplayName, testCase)))
using (var testWriter = CurrentWriter.OpenTest(testName))
{
// ReSharper disable once SuspiciousTypeConversion.Global
testWriter.WriteDuration(result.Duration);
if (result.Messages is { Count: > 0 })
{
foreach (var message in result.Messages)
{
if (TestResultMessage.StandardOutCategory.Equals(message.Category, StringComparison.CurrentCultureIgnoreCase)
|| TestResultMessage.AdditionalInfoCategory.Equals(message.Category, StringComparison.CurrentCultureIgnoreCase)
|| TestResultMessage.DebugTraceCategory.Equals(message.Category, StringComparison.CurrentCultureIgnoreCase))
{
testWriter.WriteStdOutput(message.Text);
continue;
}
if (TestResultMessage.StandardErrorCategory.Equals(message.Category, StringComparison.CurrentCultureIgnoreCase))
{
testWriter.WriteErrOutput(message.Text);
}
}
}
foreach (var attachments in result.Attachments)
{
foreach (var attachment in attachments.Attachments)
{
_attachments.SendAttachment(testName, attachment, testWriter);
}
}
switch (result.Outcome)
{
case TestOutcome.Passed:
break;
case TestOutcome.Failed:
testWriter.WriteFailed(result.ErrorMessage ?? string.Empty, result.ErrorStackTrace ?? string.Empty);
_failedTestsReportWriter.ReportFailedTest(testCase);
break;
case TestOutcome.Skipped:
case TestOutcome.None: // https://github.com/JetBrains/TeamCity.VSTest.TestAdapter/issues/23
case TestOutcome.NotFound:
if (string.IsNullOrEmpty(result.ErrorMessage))
testWriter.WriteIgnored();
else
testWriter.WriteIgnored(result.ErrorMessage);
break;
default:
throw new ArgumentOutOfRangeException(nameof(result.Outcome), result.Outcome, "Invalid value");
}
}
}