/// <summary>Assert.IsTrue(predicate(value))</summary> public static void Is <T>(this T value, Expression <Func <T, bool> > predicate, string message = "") { var condition = predicate.Compile().Invoke(value); var paramName = predicate.Parameters.First().Name; string msg = ""; try { var dumper = new ExpressionDumper <T>(value, predicate.Parameters.Single()); dumper.Visit(predicate); var dump = string.Join(", ", dumper.Members.Select(kvp => kvp.Key + " = " + kvp.Value)); msg = string.Format("\r\n{0} = {1}\r\n{2}\r\n{3}{4}", paramName, value, dump, predicate, string.IsNullOrEmpty(message) ? "" : ", " + message); } catch { msg = string.Format("{0} = {1}, {2}{3}", paramName, value, predicate, string.IsNullOrEmpty(message) ? "" : ", " + message); } Assert.IsTrue(condition, msg); }