public void WithExceptionInBeforeProceed_RethrowsException(string method, Func <ITestInterface, Task <object> > callSutMethod, object expectedResult) { var exception = new TestException(); A.CallTo(() => _sutAsserter.BeforeProceed(A <IInvocation> ._)).Throws(exception); // ACT Func <Task> act = async() => await callSutMethod(_intercepted); // ASSERT act.Should().ThrowExactly <TestException>().Which.Should().BeSameAs(exception); A.CallTo(() => _sutAsserter.BeforeProceed(A <IInvocation> ._)).MustHaveHappened(); A.CallTo(_toBeIntercepted.Fake).Where(x => x.Method.Name == method).MustNotHaveHappened(); A.CallTo(() => _sutAsserter.AfterProceed(A <IInvocation> ._, A <object> ._, A <object> ._)).MustNotHaveHappened(); A.CallTo(() => _sutAsserter.OnException(A <IInvocation> ._, exception, null)).MustNotHaveHappened(); A.CallTo(() => _sutAsserter.Finally(A <IInvocation> ._, null)).MustNotHaveHappened(); }