Perhaps there's an easier way, but you could do it by building a
LambdaExpression at runtime for each property, like this:
static void VerifyAllPropertyGets<T>(Mock<T> mock) where T : class
{
MethodInfo verifyGetMethod = GetVerifyGetMethod(mock);
foreach (var prop in typeof(T).GetProperties())
{
ParameterExpression p1 = Expression.Parameter(typeof(T), "p");
MemberExpression body = LambdaExpression.Property(p1, prop);
ParameterExpression p2 =
LambdaExpression.Parameter(typeof(T), "p");
LambdaExpression expr = LambdaExpression.Lambda(body, p2);
var closedVerifyGetMethod =
verifyGetMethod.MakeGenericMethod(prop.PropertyType);
closedVerifyGetMethod.Invoke(mock, new object[] { expr });
}
}
static MethodInfo GetVerifyGetMethod(Mock mock)
{
MethodInfo verifyGetMethod = null;
foreach (MethodInfo mi in
typeof(Mock<IThing>).GetMethods(BindingFlags.Public |
BindingFlags.Instance))
{
if (mi.Name == "VerifyGet" && mi.GetParameters().Length == 1)
{
verifyGetMethod = mi;
break;
}
}
return verifyGetMethod;
}
Then you'd use it like this:
var mock = new Mock<IThing>();
...
VerifyAllPropertyGets(mock);