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)); }