public Builder <T1> Assert(Expression <Action <T1> > assertionExpression)
            {
                if (assertionExpression == null)
                {
                    throw new ArgumentNullException(nameof(assertionExpression));
                }

                var visitor            = new ReplaceParameterWithExpressionVisitor(assertionExpression.Parameters, m_valueExpression.Body);
                var coalescedAssertion = Expression.Lambda <Action>(visitor.Visit(assertionExpression.Body));
                var assertFunc         = coalescedAssertion.Compile();

                try
                {
                    assertFunc();
                }
                catch (Exception exception)
                {
                    NUnit.Framework.Assert.Fail(GetDiagnosticMessage(coalescedAssertion.Body, exception));
                }

                return(this);
            }
            private Expression <Func <T2> > CoalesceWith <T2>(Expression <Func <T1, T2> > mapExpression)
            {
                var visitor = new ReplaceParameterWithExpressionVisitor(mapExpression.Parameters, m_valueExpression.Body);

                return(Expression.Lambda <Func <T2> >(visitor.Visit(mapExpression.Body)));
            }