单元测试平等涵盖所有属性

时间:2013-05-03 05:07:47

标签: vb.net unit-testing

我有一个.NET类,其中我实现了GetHashCode和Equals。

虽然我相信我覆盖了所有属性并对这些功能进行了测试,但未来可能会有人添加一个属性并忘记将其添加到GetHashCode和Equals函数中。忘记这些函数将导致Equals函数对于由新属性不同的对象返回true。

我正在寻找一些可以在测试代码中使用的工具或代码,它将遍历对象的所有现有属性并测试是否遗忘了某些内容。

单元测试看起来像这样:

for each property in TargetType
    dim instance1 as new TargetType
    dim instance2 as new TargetType
    instance1.property=1
    instance2.property=2
    Assert.AreNotEqual(instance1,instance2)
next

当然,属性赋值应该是智能的,以使用正确的数据类型

1 个答案:

答案 0 :(得分:0)

如果您担心要添加到类中的新属性,我建议先对序列化对象,然后比较生成的字符串。

这将确保在应用程序和单元测试中始终考虑所有属性进行比较。

序列化辅助方法看起来如下(我引用this SO线程)

'Meant to be an extension method
Public Shared Function SerializeObject(Of T)(ByVal input As T) As String
        Dim xmlSerializer = New XmlSerializer(input.GetType())
        Dim textWriter = New StringWriter()
        xmlSerializer.Serialize(textWriter, input)
        Return textWriter.ToString()
End Function

您可以在自定义Equals方法中使用上述方法。 希望这会有所帮助。