diff --git a/TUnit.Engine/Reporters/GitHubReporter.cs b/TUnit.Engine/Reporters/GitHubReporter.cs index 19aa9841a4..0269faee6d 100644 --- a/TUnit.Engine/Reporters/GitHubReporter.cs +++ b/TUnit.Engine/Reporters/GitHubReporter.cs @@ -321,9 +321,9 @@ or TimeoutTestNodeStateProperty return stateProperty switch { FailedTestNodeStateProperty failedTestNodeStateProperty => - failedTestNodeStateProperty.Exception?.ToString() ?? "Test failed", + GetTruncatedExceptionMessage(failedTestNodeStateProperty.Exception) ?? "Test failed", ErrorTestNodeStateProperty errorTestNodeStateProperty => - errorTestNodeStateProperty.Exception?.ToString() ?? "Test failed", + GetTruncatedExceptionMessage(errorTestNodeStateProperty.Exception) ?? "Test failed", TimeoutTestNodeStateProperty timeoutTestNodeStateProperty => timeoutTestNodeStateProperty.Explanation, #pragma warning disable CS0618 // CancelledTestNodeStateProperty is obsolete CancelledTestNodeStateProperty => "Test was cancelled", @@ -332,6 +332,25 @@ or TimeoutTestNodeStateProperty }; } + private static string? GetTruncatedExceptionMessage(Exception? exception) + { + if (exception is null) + { + return null; + } + + var message = exception.Message; + + var firstStackTraceLine = exception.StackTrace?.Split('\n').FirstOrDefault()?.Trim(); + + if (string.IsNullOrWhiteSpace(firstStackTraceLine)) + { + return message; + } + + return $"{message}\n{firstStackTraceLine}"; + } + private static string GetStatus(IProperty? stateProperty) { return stateProperty switch