0

GetHashCode と Equals を実装した .NET クラスがあります。

私はすべてのプロパティをカバーし、これらの関数のテストを行ったと信じていますが、将来、誰かがプロパティを追加し、それを 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 に答える