Exemplo n.º 1
0
        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>();
        }