public async Task Should_Filter_Exception(Exception exception, string exceptionMessage, int httpStatusCode) { var exceptionContext = GetExceptionContext(exception); var stringLocalizer = GetMockStringLocalizer <ApiResponseMessage>(ApiResponseMessage.Exception, ApiResponseMessage.Exception); var apiExceptionFilter = new ApiExceptionFilterAttribute(stringLocalizer.Object); await apiExceptionFilter.OnExceptionAsync(exceptionContext); var result = (exceptionContext.Result as JsonResult).Value as ApiResponse <object>; Assert.Equal(httpStatusCode, result.StatusCode); Assert.Equal(exceptionMessage, result.ResponseException.ErrorMessage); }
public async Task OnAsyncExceptionTests() { Logger.Init("", "CoreAccessControl.log", "CoreAccessControl", Severity.Information, mock: true); var actionContext = new ActionContext() { HttpContext = new DefaultHttpContext(), RouteData = new RouteData(), ActionDescriptor = new ActionDescriptor() }; // The stacktrace message and source member variables are virtual and so we can stub them here. var mockException = new Mock <Exception>(); mockException.Setup(e => e.StackTrace) .Returns("Test stacktrace"); mockException.Setup(e => e.Message) .Returns("Test message"); mockException.Setup(e => e.Source) .Returns("Test source"); // the List<FilterMetadata> here doesn't have much relevance in the test but is required // for instantiation. So we instantiate a new instance of it with no members to ensure // it does not effect the test. var exceptionContext = new ExceptionContext(actionContext, new List <IFilterMetadata>()) { Exception = mockException.Object }; var filter = new ApiExceptionFilterAttribute(); await filter.OnExceptionAsync(exceptionContext); // Assumption here that your exception filter modifies status codes. // Just used as an example of how you can assert in this test. Assert.Equal(500, (int)exceptionContext.HttpContext.Response.StatusCode); }