public static IEnumerable <object[]> GetUnaryExpressionMatrix() { Expression <Func <string, bool> > isNullOrWhiteSpace = str => string.IsNullOrWhiteSpace(str); Expression <Func <string, bool> > isNullOrWhiteSpaceWrapper = str => StringWrapper.IsNullOrWhitespace(str); Expression <Func <string, bool> > isNullOrEmpty = str => string.IsNullOrEmpty(str); var method = (isNullOrWhiteSpace.Body as MethodCallExpression) .Method; var methodWrapper = (isNullOrWhiteSpaceWrapper.Body as MethodCallExpression) .Method; var methodAlt = (isNullOrEmpty.Body as MethodCallExpression) .Method; // everything is the same, should be true yield return(new object[] { Expression.IsTrue("1".AsConstantExpression(), method), Expression.IsTrue("1".AsConstantExpression(), method), true }); // different types = false yield return(new object[] { Expression.IsTrue("1".AsConstantExpression(), method), Expression.IsTrue("1".AsConstantExpression(), methodWrapper), false }); // different method names = false yield return(new object[] { Expression.IsTrue("1".AsConstantExpression(), method), Expression.IsTrue("1".AsConstantExpression(), methodAlt), false }); // null and null = true yield return(new object[] { Expression.IsTrue(true.AsConstantExpression()), Expression.IsTrue(true.AsConstantExpression()), true }); // null and not null = false yield return(new object[] { Expression.IsTrue(true.AsConstantExpression()), Expression.IsTrue("1".AsConstantExpression(), method), false }); // not null and null = false yield return(new object[] { Expression.IsTrue("1".AsConstantExpression(), method), Expression.IsTrue(true.AsConstantExpression()), false }); }