From 8200e13ca5e615804e80b8b7678960206b763dd9 Mon Sep 17 00:00:00 2001 From: Aleh Yanushkevich Date: Sat, 22 Feb 2025 14:12:19 +0300 Subject: [PATCH] Added ability to capture output for failed tests for Xunit. Signed-off-by: oyanushkevich --- Allure.Xunit/AllureXunitConfiguration.cs | 10 ++++++---- Allure.Xunit/AllureXunitHelper.cs | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Allure.Xunit/AllureXunitConfiguration.cs b/Allure.Xunit/AllureXunitConfiguration.cs index 9968f2ad..7a3ab2f2 100644 --- a/Allure.Xunit/AllureXunitConfiguration.cs +++ b/Allure.Xunit/AllureXunitConfiguration.cs @@ -13,6 +13,8 @@ internal class AllureXunitConfiguration : AllureConfiguration { public string XunitRunnerReporter { get; set; } = "auto"; + public bool CaptureFailedTestOutput { get; set; } = false; + [JsonConstructor] protected AllureXunitConfiguration( string? title, @@ -31,8 +33,8 @@ static readonly Lazy currentConfig = new(ParseCurrentConfig); static AllureXunitConfiguration ParseCurrentConfig() => JObject.Parse( - AllureLifecycle.Instance.JsonConfiguration - )["allure"]?.ToObject() - ?? new AllureXunitConfiguration(null, null, null); + AllureLifecycle.Instance.JsonConfiguration + )["allure"]?.ToObject() + ?? new AllureXunitConfiguration(null, null, null); } -} +} \ No newline at end of file diff --git a/Allure.Xunit/AllureXunitHelper.cs b/Allure.Xunit/AllureXunitHelper.cs index 1f7fc7b1..50ef1a50 100644 --- a/Allure.Xunit/AllureXunitHelper.cs +++ b/Allure.Xunit/AllureXunitHelper.cs @@ -33,13 +33,21 @@ internal static void StartAllureTestCase( testResult ?? CreateTestResultByTest(test) ); - internal static void ApplyTestFailure(IFailureInformation failure) + internal static void ApplyTestFailure(ITestFailed failure) { var trace = string.Join("\n", failure.StackTraces); var message = string.Join("\n", failure.Messages); + + if (AllureXunitConfiguration.CurrentConfig.CaptureFailedTestOutput) + { + message = string.Concat(message, "\n", failure.Output); + } + var status = failure.ExceptionTypes.Any( exceptionType => !exceptionType.StartsWith("Xunit.Sdk.") - ) ? Status.broken : Status.failed; + ) + ? Status.broken + : Status.failed; AllureLifecycle.Instance.UpdateTestCase(testResult => { @@ -93,10 +101,7 @@ object[] arguments } ).ToList(); - AllureLifecycle.Instance.UpdateTestCase(testResult => - { - testResult.parameters = parametersList; - }); + AllureLifecycle.Instance.UpdateTestCase(testResult => { testResult.parameters = parametersList; }); } internal static void ReportCurrentTestCase() @@ -174,7 +179,7 @@ static void AddDistinct( foreach (var value in values) { - labels.Add(new Label {name = labelName, value = value}); + labels.Add(new Label { name = labelName, value = value }); } }