如何在.NET中循环并测试已实例化对象的属性值

本文关键字:实例化 对象 属性 测试 NET 循环 | 更新日期: 2023-09-27 18:23:56

已经"在谷歌上搜索了这个cr*p",所以如果答案在这里,或者相当简单,请道歉。

我正在写单元测试。在这个特殊的例子中,我使用一个无参数构造函数来实例化一个对象。当使用该构造函数进行实例化时,不会设置其任何属性。

然后,作为测试的一部分,我想"循环"这些属性,并断言它们是"null"、"0"或"false"(这将是正确的状态)。

我知道这听起来像是一件愚蠢的事情,但如果我能做到这一点,那么我就可以为其他一切编写更高效、更可读的测试。

我知道我可以"循环"通过一个"类型"的属性,但那不是一个实例化的"类型"对象。它是一个"Type"对象。

在我的脑海中,它应该是(但显然不是)以下内容:

var target = new MyObject();
foreach(var property in target.GetProperties())
{
    Assert.IsNull(property);
}

有人吗?

如何在.NET中循环并测试已实例化对象的属性值

循环遍历类型的属性,然后针对类型的实例找到每个属性的值:

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);
}