已经"在谷歌上搜索了这个cr*p",所以如果答案在这里,或者相当简单,请道歉。
我正在写单元测试。在这个特殊的例子中,我使用一个无参数构造函数来实例化一个对象。当使用该构造函数进行实例化时,不会设置其任何属性。
然后,作为测试的一部分,我想"循环"这些属性,并断言它们是"null"、"0"或"false"(这将是正确的状态)。
我知道这听起来像是一件愚蠢的事情,但如果我能做到这一点,那么我就可以为其他一切编写更高效、更可读的测试。
我知道我可以"循环"通过一个"类型"的属性,但那不是一个实例化的"类型"对象。它是一个"Type"对象。
在我的脑海中,它应该是(但显然不是)以下内容:
var target = new MyObject();
foreach(var property in target.GetProperties())
{
Assert.IsNull(property);
}
有人吗?
循环遍历类型的属性,然后针对类型的实例找到每个属性的值:
var target = new MyObject();
foreach(var property in target.GetType().GetProperties())
{
Type propertyType = property.PropertyType;
object actual = property.GetValue(target, null);
object expected = propertyType.IsValueType
? Activator.CreateInstance(propertyType)
: null;
Assert.AreEqual(expected, actual);
}