public void ShouldAbortTransactionIfExceptionThrown() { Thrower instance = new Thrower() { ShouldThrowException = true }; TransactionStatus status = TransactionStatus.InDoubt; instance.Completed = (obj, e) => { status = e.Transaction.TransactionInformation.Status; }; IInvocation invocation = Substitute.For <IInvocation>(); invocation.Request.Target.Returns(instance); MethodInfo method = typeof(Thrower).GetMethod("DoSomething"); invocation.Request.Method.Returns(method); invocation.When(i => i.Proceed()).Do(i => instance.DoSomething()); try { TransactionInterceptor interceptor = new TransactionInterceptor(); interceptor.Intercept(invocation); Assert.Fail("An exception should have been thrown."); } catch (Exception) { Assert.AreEqual(TransactionStatus.Aborted, status, "The transaction was not abandoned."); } }
public void ShouldCommitTransactionIfExceptionNotThrown() { Thrower instance = new Thrower() { ShouldThrowException = false }; TransactionStatus status = TransactionStatus.InDoubt; instance.Completed = (obj, e) => { status = e.Transaction.TransactionInformation.Status; }; IInvocation invocation = Substitute.For <IInvocation>(); invocation.Request.Target.Returns(instance); MethodInfo method = typeof(Thrower).GetMethod("DoSomething"); invocation.Request.Method.Returns(method); invocation.When(i => i.Proceed()).Do(i => instance.DoSomething()); TransactionInterceptor interceptor = new TransactionInterceptor(); interceptor.Intercept(invocation); Assert.AreEqual(TransactionStatus.Committed, status, "The transaction was not committed."); }
public void ShouldAbortTransactionIfExceptionThrown() { Thrower instance = new Thrower() { ShouldThrowException = true }; TransactionStatus status = TransactionStatus.InDoubt; instance.Completed = (obj, e) => { status = e.Transaction.TransactionInformation.Status; }; IInvocation invocation = Substitute.For<IInvocation>(); invocation.Request.Target.Returns(instance); MethodInfo method = typeof(Thrower).GetMethod("DoSomething"); invocation.Request.Method.Returns(method); invocation.When(i => i.Proceed()).Do(i => instance.DoSomething()); try { TransactionInterceptor interceptor = new TransactionInterceptor(); interceptor.Intercept(invocation); Assert.Fail("An exception should have been thrown."); } catch (Exception) { Assert.AreEqual(TransactionStatus.Aborted, status, "The transaction was not abandoned."); } }
public void ShouldCommitTransactionIfExceptionNotThrown() { Thrower instance = new Thrower() { ShouldThrowException = false }; TransactionStatus status = TransactionStatus.InDoubt; instance.Completed = (obj, e) => { status = e.Transaction.TransactionInformation.Status; }; IInvocation invocation = Substitute.For<IInvocation>(); invocation.Request.Target.Returns(instance); MethodInfo method = typeof(Thrower).GetMethod("DoSomething"); invocation.Request.Method.Returns(method); invocation.When(i => i.Proceed()).Do(i => instance.DoSomething()); TransactionInterceptor interceptor = new TransactionInterceptor(); interceptor.Intercept(invocation); Assert.AreEqual(TransactionStatus.Committed, status, "The transaction was not committed."); }