public static void RunAsync <THandler, TInput, TOutput>() where THandler : IAsyncHandler <TInput, TOutput>, new() { AppDomain.CurrentDomain.UnhandledException += HandleException; var uae = Environment.GetEnvironmentVariable("UNWRAP_AGGREGATE_EXCEPTIONS"); var unwrapAggregateExceptions = uae != null && (uae == "1" || uae.ToLower() == "true"); IHandlerRunner runner = new AsyncHandlerRunner <THandler, TInput, TOutput>(unwrapAggregateExceptions); Run(runner); }
public void Handle_CallsHandlerHandleWithInputAndContext_AndReturnsOutput() { // arrange var runner = new AsyncHandlerRunner <TestHandler, string, string>(true); var handler = A.Fake <TestHandler>(); var context = A.Fake <ILambdaContext>(); runner.GetType().GetField("Handler", BindingFlags.NonPublic | BindingFlags.Instance) .SetValue(runner, handler); A.CallTo(() => handler.Handle("input", context)).Returns("output"); // act runner.Handle("input", context); // assert A.CallTo(() => handler.Handle("input", context)).MustHaveHappened(); }
public void Handle_DoesNotUnwrapAggregateExceptions_WhenFlagIsFalse() { // arrange var runner = new AsyncHandlerRunner <TestHandler, string, string>(false); var handler = A.Fake <TestHandler>(); var context = A.Fake <ILambdaContext>(); runner.GetType().GetField("Handler", BindingFlags.NonPublic | BindingFlags.Instance) .SetValue(runner, handler); A.CallTo(() => handler.Handle(A <string> .Ignored, A <ILambdaContext> .Ignored)) .ThrowsAsync(new DivideByZeroException()); // act var ex = Record.Exception(() => runner.Handle(string.Empty, context)); // assert ex.ShouldBeOfType <AggregateException>(); }