Пример #1
0
        public void AllElementsCantDecide_AllCalled()
        {
            // Arrange
            int           someVal  = 10;
            ChainDecision expected = ChainDecision.CantSay;

            var element1 = MockRepository.GenerateStub <IChainElement <int> >();
            var element2 = MockRepository.GenerateStub <IChainElement <int> >();
            var element3 = MockRepository.GenerateStub <IChainElement <int> >();

            element1.Stub(c => c.Process(someVal)).Return(ChainDecision.CantSay);
            element2.Stub(c => c.Process(someVal)).Return(ChainDecision.CantSay);
            element3.Stub(c => c.Process(someVal)).Return(ChainDecision.CantSay);

            var provider = MockRepository.GenerateStub <IChainElementsProvider <int> >();

            provider.Stub(c => c.GetElements()).Return(new[] { element1, element2, element3 });

            IChainOfResponsibility <int> chain = new ChainOfResponsibility <int>(provider);

            // Act
            ChainDecision result = chain.Process(someVal);

            // Assert
            element1.AssertWasCalled(s => s.Process(someVal));
            element2.AssertWasCalled(s => s.Process(someVal));
            element3.AssertWasCalled(s => s.Process(someVal));
            Assert.AreEqual(expected, result);
        }
Пример #2
0
        public void SecondElementCanDecide_FirstAndSecondCalled()
        {
            // Arrange
            int           someVal  = 10;
            ChainDecision expected = ChainDecision.Passed;

            IChainOfResponsibility <int> chain = new ChainOfResponsibility <int>();

            var element1 = MockRepository.GenerateStub <IChainElement <int> >();
            var element2 = MockRepository.GenerateStub <IChainElement <int> >();
            var element3 = MockRepository.GenerateStub <IChainElement <int> >();

            element1.Stub(c => c.Process(someVal)).Return(ChainDecision.CantSay);
            element2.Stub(c => c.Process(someVal)).Return(expected);

            chain.Add(element1);
            chain.Add(element2);
            chain.Add(element3);

            // Act
            ChainDecision result = chain.Process(someVal);

            // Assert
            element1.AssertWasCalled(s => s.Process(someVal));
            element2.AssertWasCalled(s => s.Process(someVal));
            element3.AssertWasNotCalled(s => s.Process(Arg <int> .Is.Anything));
            Assert.AreEqual(expected, result);
        }
        public ChainDecision Process(T item)
        {
            foreach (var chainElement in this.chain)
            {
                ChainDecision decision = chainElement.Process(item);

                if (decision != ChainDecision.CantSay)
                {
                    return(decision);
                }
            }

            return(ChainDecision.CantSay);
        }