0

我有一个 .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

当然,属性分配应该很聪明才能使用正确的数据类型

4

1 回答 1

0

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

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

序列化辅助方法如下所示(我提到了这个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方法。希望这可以帮助。

于 2013-05-03T06:22:25.040 回答