public void MustProcessBlockRulesFirst() { var allow = new Mock <IRule>(); var block = new Mock <IRule>(); allow.SetupGet(r => r.Result).Returns(FilterResult.Allow); block.SetupGet(r => r.Result).Returns(FilterResult.Block); block.Setup(r => r.IsMatch(It.IsAny <Request>())).Returns(true); sut.Load(allow.Object); sut.Load(block.Object); var result = sut.Process(new Request()); allow.Verify(r => r.IsMatch(It.IsAny <Request>()), Times.Never); block.Verify(r => r.IsMatch(It.IsAny <Request>()), Times.Once); Assert.AreEqual(FilterResult.Block, result); }