I did not like to filter all get / set methods, especially since I sometimes write get and set the logic that needs to be checked. For me, just for basic coverage of relatively simple models, the following pairs of xUnit tests worked well:
public class ModelsGetSetTest { [ClassData(typeof(ModelTestDataGenerator))] [Theory] public void GettersGetWithoutError<T>(T model) where T: BaseEntity { PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); for (var i = 0; i < properties.Length; i++) { var prop = properties[i]; prop.GetValue(model); } } [ClassData(typeof(ModelTestDataGenerator))] [Theory] public void SettersSetWithoutError<T>(T model) where T : BaseEntity { PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); for (var i = 0; i < properties.Length; i++) { var prop = properties[i]; prop.SetValue(model, null); } } public class ModelTestDataGenerator : IEnumerable<object[]> { private readonly List<object[]> _data = new List<object[]> { new object[] { new UserRole() }, new object[] { new User() }, new object[] { new Role() } }; public IEnumerator<object[]> GetEnumerator() => _data.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } }
source share