public void VisitNamedExpression()
        {
            var innerExpression = Expression.Constant(0);
            var namedExpression = new NamedExpression("Name", innerExpression);

            var fakeResolvedInnerExpression = new SqlLiteralExpression(1);

            _resolverMock.Expect(mock => mock.ResolveConstantExpression(innerExpression)).Return(fakeResolvedInnerExpression);

            var fakeCombinedExpression = new NamedExpression("Name2", Expression.Constant(2));

            _namedExpressionCombinerMock
            .Expect(mock => mock.ProcessNames(Arg <NamedExpression> .Matches(e => e.Name == "Name" && e.Expression == fakeResolvedInnerExpression)))
            .Return(fakeCombinedExpression);

            // Result is revisited.
            var fakeResolvedInnerExpression2 = new SqlLiteralExpression(3);

            _resolverMock
            .Expect(mock => mock.ResolveConstantExpression((ConstantExpression)fakeCombinedExpression.Expression))
            .Return(fakeResolvedInnerExpression2);
            _namedExpressionCombinerMock
            .Expect(mock => mock.ProcessNames(Arg <NamedExpression> .Matches(e => e.Name == "Name2" && e.Expression == fakeResolvedInnerExpression2)))
            .Return(null)
            .WhenCalled(mi => mi.ReturnValue = mi.Arguments[0]);

            var result = _visitor.Visit(namedExpression);

            _resolverMock.VerifyAllExpectations();
            _namedExpressionCombinerMock.VerifyAllExpectations();

            Assert.That(result, Is.TypeOf <NamedExpression> ());
            Assert.That(((NamedExpression)result).Name, Is.EqualTo("Name2"));
            Assert.That(((NamedExpression)result).Expression, Is.SameAs(fakeResolvedInnerExpression2));
        }