VB.NET中的问题单元测试



我有以下代码:

<TestMethod()> _
Public Sub GetDirectoryEntryTest()
    Dim path As String = runner.getLDAPPath()
    Dim expected As DirectoryEntry = runner.GetDirectoryEntry()
    Dim actual As DirectoryEntry
    actual = LDAPBase.GetDirectoryEntry(path)
    Assert.AreEqual(expected, actual)
End Sub

此单元测试失败。DirectoryEntry对象完全相同,但对不同对象的引用不同。我来自Java背景,你总是有.equals()

我该怎么做才能使其正确求值并返回true,因为无论如何,两个对象都是相等的。是否有一些我可以做的事情,就像我在Java中做的那样,覆盖equals()?

试着用下面的代码比较对象的路径:

Assert.AreEqual(expected.Path, actual.Path)

将比较底层路径(字符串类型)而不是对象引用。如果路径相同就足够了,你不应该重写任何东西。

编辑:

DirectoryEntry是一个引用类型,它继承了Object中的Equals,因此:

从对象。=方法:

Equals的默认实现支持引用类型,以及值类型的按位相等。参考相等意味着被比较的对象引用引用相同的对象。按位相等意味着被比较的对象具有相同的二进制表示。

在什么意义上这两个条目相等?它们的ToString()相等吗?如果这足以认为它们在测试中相等,则将两个ToString()值相互比较。

如果你需要比较两个DirectoryEntries,实现一个自定义的IEqualityComparer,并使用它来比较测试中的相等性

最新更新