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

标签 c# unit-testing reflection

已经“用谷歌搜索了 cr*p”,所以如果答案就在这里,或者相当简单,我们深表歉意。

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

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

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

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

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

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

关于c# - 如何在 .NET 中循环并测试已实例化对象的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226850/

相关文章:

.net - 我可以将几行代码注入(inject)到其他人的 .NET dll 中吗?

c# - 为什么 Assert.AreEqual<T> 因相同的对象而失败?

C# udp 套接字没有收到整个消息

c# - 了解移位运算符

c# - 将 Web 应用程序部署到 IIS 时,图像未加载到中继器内

unit-testing - 如何对 Jackson JsonSerializer 和 JsonDeserializer 进行单元测试

c# - 尝试从资源目录访问图像时出现 XamlParseException

c# - 如何对包含 Environment.OSVersion.Version 的代码进行单元测试

Java反射检查传递的对象是否是相同类型

C# - 使用反射从列表<Class>中提取值列表