public static void MessagesAreEqual(this Assertions assert, Message expected, Message actual) { if(expected == null) { assert.Null(actual); return; } assert.NotNull(actual); assert.IsType(expected.GetType(), actual); foreach(var method in GetPublicPropertyGetMethods(expected.GetType())) { assert.Equal(method.Invoke(expected, null), method.Invoke(actual, null)); } }