public void RecordException(Exception ex) { var result = new ExceptionResult(ex, FailureSite.Test); SetResult(result.ResultState, result.Message, result.StackTrace); if (AssertionResults.Count > 0 && result.ResultState == ResultState.Error) { // Add pending failures to the legacy result message Message += Environment.NewLine + Environment.NewLine + CreateLegacyFailureMessage(); // Add to the list of assertion errors, so that newer runners will see it AssertionResults.Add(new AssertionResult(AssertionStatus.Error, result.Message, result.StackTrace)); } }
/// <summary> /// Set the test result based on the type of exception thrown /// </summary> /// <param name="ex">The exception that was thrown</param> public void RecordException(Exception ex) { if (ex is NUnitException || ex is TargetInvocationException) { ex = ex.InnerException; } if (ex is AssertionException) { AssertionResults.Add(new AssertionResult(AssertionStatus.Failed, ex.Message, StackFilter.DefaultFilter.Filter(ex.StackTrace))); } if (ex is ResultStateException) { string message = ex is MultipleAssertException ? CreateLegacyFailureMessage() : ex.Message; string stackTrace = StackFilter.DefaultFilter.Filter(ex.StackTrace); SetResult(((ResultStateException)ex).ResultState, message, stackTrace); } #if !NETSTANDARD1_3 && !NETSTANDARD1_6 else if (ex is System.Threading.ThreadAbortException) { SetResult(ResultState.Cancelled, "Test cancelled by user", ex.StackTrace); } #endif else { string message = ExceptionHelper.BuildMessage(ex); string stackTrace = ExceptionHelper.BuildStackTrace(ex); SetResult(ResultState.Error, message, stackTrace); if (AssertionResults.Count > 0) { // Add pending failures to the legacy result message Message += CreateLegacyFailureMessage(); // Add to the list of assertion errors, so that newer runners will see it AssertionResults.Add(new AssertionResult(AssertionStatus.Error, message, stackTrace)); } } }