public async Task ExecuteActionFilterAsync_IfOnActionExecutedReplacesException_ThrowsNewException() { // Arrange Exception expectedReplacementException = CreateException(); using (HttpRequestMessage request = new HttpRequestMessage()) { Mock <ActionFilterAttribute> mock = new Mock <ActionFilterAttribute>(); mock.CallBase = true; mock .Setup(f => f.OnActionExecuted(It.IsAny <HttpActionExecutedContext>())) .Callback <HttpActionExecutedContext>((c) => c.Exception = expectedReplacementException); IActionFilter product = mock.Object; HttpActionContext context = ContextUtil.CreateActionContext(); Func <Task <HttpResponseMessage> > continuation = () => CreateFaultedTask <HttpResponseMessage>(CreateException()); // Act Exception exception = await Assert.ThrowsAsync <InvalidOperationException>( () => product.ExecuteActionFilterAsync(context, CancellationToken.None, continuation) ); // Assert Assert.Same(expectedReplacementException, exception); } }