예제 #1
0
        public void Test_WithScope()
        {
            var object1 = new object();
            var object2 = new object();

            InvokeOnExecutionPlay(_strategy);
            TransactionMock.BackToRecord();
            TransactionFactoryMock.BackToRecord();
            var newScopeMock = MockRepository.StrictMock <ITransactionScope>();

            using (MockRepository.Ordered())
            {
                ScopeMock.Expect(mock => mock.Leave());
                TransactionMock.Expect(mock => mock.Release());
                TransactionFactoryMock.Expect(mock => mock.Create()).Return(_newTransactionMock);
                _newTransactionMock.Expect(mock => mock.EnterScope()).Return(newScopeMock);

                ExecutionContextMock.Expect(mock => mock.GetVariables()).Return(new[] { object1, object2 });
                _newTransactionMock.Expect(mock => mock.EnsureCompatibility(Arg <IEnumerable> .List.ContainsAll(new[] { object1, object2 })));
            }
            Assert.That(_strategy.Scope, Is.SameAs(ScopeMock));
            MockRepository.ReplayAll();

            _strategy.Reset();

            MockRepository.VerifyAll();
            Assert.That(_strategy.Scope, Is.SameAs(newScopeMock));
        }
예제 #2
0
        public void Test_WithIncompatibleVariables()
        {
            var object1 = new object();
            var object2 = new object();
            var invalidOperationException = new InvalidOperationException("Oh nos!");

            TransactionMock.BackToRecord();
            TransactionFactoryMock.BackToRecord();
            TransactionMock.Stub(mock => mock.Release());
            TransactionFactoryMock.Stub(mock => mock.Create()).Return(_newTransactionMock);

            ExecutionContextMock.Stub(mock => mock.GetVariables()).Return(new[] { object1, object2 });
            _newTransactionMock
            .Stub(mock => mock.EnsureCompatibility(Arg <IEnumerable> .List.ContainsAll(new[] { object1, object2 })))
            .Throw(invalidOperationException);
            MockRepository.ReplayAll();

            Assert.That(
                () => _strategy.Reset(),
                Throws
                .TypeOf <WxeException>()
                .With.Message.EqualTo(
                    "One or more of the variables of the WxeFunction are incompatible with the new transaction after the Reset. Oh nos! "
                    + "(To avoid this exception, clear the Variables collection from incompatible objects before calling Reset and repopulate it "
                    + "afterwards.)")
                .And.InnerException.SameAs(invalidOperationException));

            Assert.That(_strategy.Scope, Is.Null);
            Assert.That(_strategy.Transaction, Is.SameAs(_newTransactionMock));
        }
예제 #3
0
        public void Test_WithoutScope_And_CreateThrows()
        {
            var exception = new ApplicationException("Reset Exception");

            TransactionMock.BackToRecord();
            TransactionMock.Expect(mock => mock.Release());
            TransactionFactoryMock.BackToRecord();
            TransactionFactoryMock.Expect(mock => mock.Create()).Throw(exception);

            Assert.That(_strategy.Scope, Is.Null);
            MockRepository.ReplayAll();

            try
            {
                _strategy.Reset();
                Assert.Fail("Expected Exception");
            }
            catch (ApplicationException actualException)
            {
                Assert.That(actualException, Is.SameAs(exception));
            }
            MockRepository.VerifyAll();
            Assert.That(_strategy.Scope, Is.Null);
            Assert.That(_strategy.Transaction, Is.SameAs(TransactionMock), "Transaction just released is retained.");
        }
예제 #4
0
        public void Test_WithScope_And_ResetThrows()
        {
            InvokeOnExecutionPlay(_strategy);
            var exception = new ApplicationException("Reset Exception");

            TransactionFactoryMock.BackToRecord();
            TransactionMock.BackToRecord();
            using (MockRepository.Ordered())
            {
                ScopeMock.Expect(mock => mock.Leave());
                TransactionMock.Expect(mock => mock.Release());
                TransactionFactoryMock.Expect(mock => mock.Create()).Throw(exception);
            }
            Assert.That(_strategy.Scope, Is.SameAs(ScopeMock));
            MockRepository.ReplayAll();

            try
            {
                _strategy.Reset();
                Assert.Fail("Expected Exception");
            }
            catch (ApplicationException actualException)
            {
                Assert.That(actualException, Is.SameAs(exception));
            }
            MockRepository.VerifyAll();
            Assert.That(_strategy.Scope, Is.SameAs(ScopeMock));
            Assert.That(_strategy.Transaction, Is.SameAs(TransactionMock), "Transaction just released is retained.");
        }
예제 #5
0
        public override void SetUp()
        {
            base.SetUp();
            ExecutionContextMock.BackToRecord();
            ExecutionContextMock.Stub(stub => stub.GetInParameters()).Return(new object[0]).Repeat.Any();
            ExecutionContextMock.Replay();

            TransactionMock.BackToRecord();
            TransactionMock.Stub(stub => stub.EnsureCompatibility(Arg <IEnumerable> .Is.NotNull));
            TransactionMock.Replay();

            _strategy = MockRepository.PartialMock <ScopedTransactionStrategyBase> (
                true, (Func <ITransaction>)(() => TransactionMock), OuterTransactionStrategyMock, ExecutionContextMock);
            _strategy.Replay();

            ExecutionContextMock.BackToRecord();
            TransactionMock.BackToRecord();
        }