public async Task ExecuteThrowingSynchronousMethod(DefaultExecutionSetup sut)
        {
            // Arrange
            Action action = () => { throw new FileLoadException("Some random message " + Guid.NewGuid()); };

            // Act/Assert
            await AssertExecutionThrows <FileLoadException>(GetMethodData(action.GetMethodInfo(), sut, action.Target))
            .ConfigureAwait(false);
        }
        public async Task ExecuteAsynchronousMethodThatThrowsSynchronously(DefaultExecutionSetup sut)
        {
            // Arrange
            Func <Task> action = () => { throw new FieldAccessException("Some random message " + Guid.NewGuid()); };

            // Act/Assert
            await AssertExecutionThrows <FieldAccessException>(GetMethodData(action.GetMethodInfo(), sut, action.Target))
            .ConfigureAwait(false);
        }
        public async Task ExecuteSynchronousMethod(DefaultExecutionSetup sut)
        {
            // Arrange
            bool       executed   = false;
            Action     action     = () => { executed = true; };
            MethodData methodData = GetMethodData(action.GetMethodInfo(), sut, action.Target);

            // Act
            await methodData.ExecuteAction().ConfigureAwait(false);

            Assert.True(executed);
        }
        public async Task ExecuteContructor(DefaultExecutionSetup sut)
        {
            // Arrange
            MethodData methodData =
                GetMethodData(
                    typeof(DefaultExecutionSetupShould).GetConstructor(Type.EmptyTypes),
                    sut,
                    new DefaultExecutionSetupShould());

            // Act
            await methodData.ExecuteAction().ConfigureAwait(false);
        }
        public void InitializeWhenSetup(
            MethodData methodData,
            DefaultExecutionSetup sut)
        {
            // Act
            Func <Task> execute = ((IExecutionSetup)sut).Setup(methodData);

            // Assert
            Assert.NotNull(execute);
            Assert.Same(methodData.MethodUnderTest, sut.MethodUnderTest);
            Assert.Same(methodData.Parameters, sut.Parameters);
            Assert.Same(methodData.InstanceUnderTest, sut.Sut);
        }
        public async Task ExecuteAsynchronousThrowingMethod(DefaultExecutionSetup sut)
        {
            // Arrange
            Func <Task> action = async() =>
            {
                await Task.Yield();

                throw new FileNotFoundException("Some random message " + Guid.NewGuid());
            };

            // AAA
            await AssertExecutionThrows <FileNotFoundException>(GetMethodData(action.GetMethodInfo(), sut, action.Target))
            .ConfigureAwait(false);
        }