如何遍历并测试.NET中已实例化对象的属性值

时间:2012-02-10 11:11:37

标签: c# unit-testing reflection

如果答案是在这里,或者说相当简单,那么就用“Google搜索cr * p”来表示道歉。

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

然后,作为测试的一部分,我希望“循环”通过属性并声明它们是“null”,“0”或“false”(这将是正确的状态)。

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

我知道我可以“循环”通过“类型”的属性,但这不是“类型”的实例化对象。这是一个“类型”对象。

在我看来,应该(但显然不是)以下内容:

var target = new MyObject();

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

任何?

1 个答案:

答案 0 :(得分:3)

循环遍历该类型的属性,然后根据类型的实例找到每个属性的

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