コード例 #1
0
            public void Dispatch_method_executes_command_and_dispatches_to_interceptors_which_can_change_result()
            {
                var interceptionContext = new DbInterceptionContext();

                var reader      = new Mock <DbDataReader>().Object;
                var mockCommand = new Mock <DbCommand>();

                mockCommand.Protected()
                .Setup <DbDataReader>("ExecuteDbDataReader", CommandBehavior.SequentialAccess)
                .Returns(reader);

                var mockInterceptor = new Mock <IDbCommandInterceptor>();
                var interceptReader = new Mock <DbDataReader>().Object;

                mockInterceptor.Setup(
                    m => m.ReaderExecuted(mockCommand.Object, CommandBehavior.SequentialAccess, reader, interceptionContext))
                .Returns(interceptReader);

                var dispatcher         = new DbCommandDispatcher();
                var internalDispatcher = dispatcher.InternalDispatcher;

                internalDispatcher.Add(mockInterceptor.Object);

                Assert.Same(interceptReader, dispatcher.Reader(mockCommand.Object, CommandBehavior.SequentialAccess, interceptionContext));

                mockCommand.Protected().Verify("ExecuteDbDataReader", Times.Once(), CommandBehavior.SequentialAccess);
                mockInterceptor.Verify(m => m.ReaderExecuting(mockCommand.Object, CommandBehavior.SequentialAccess, interceptionContext));
                mockInterceptor.Verify(
                    m => m.ReaderExecuted(mockCommand.Object, CommandBehavior.SequentialAccess, reader, interceptionContext));
            }