Pertanyaan Soal Pengujian Unit di VB.NET


Saya memiliki kode berikut:

<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

Tes unit ini gagal. Itu DirectoryEntry objek persis sama, tetapi referensi berbeda untuk objek yang berbeda. Saya berasal dari latar belakang Java tempat Anda selalu memiliki .equals().

Apa yang bisa saya lakukan agar ini akan dievaluasi dengan benar dan kembali benar karena untuk semua maksud dan tujuan, objek itu sama. Adakah yang bisa saya lakukan seperti yang akan saya lakukan di Jawa dan mengesampingkan persamaan ()?


5
2017-08-16 14:11


asal


Jawaban:


Coba bandingkan jalur objek dengan sesuatu seperti ini:

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

Itu akan membandingkan jalur yang mendasari (tipe string) daripada referensi objek. Jika jalur yang sama sudah cukup Anda tidak perlu mengesampingkan apa pun.

EDIT:

DirectoryEntry adalah tipe referensi yang mewarisi Setara dari Objek dan sebagainya:

Dari Metode Object.Equals:

Penerapan standar Kesetaraan mendukung persamaan referensi untuk   tipe referensi, dan kesetaraan bitwise untuk jenis nilai. Referensi   kesetaraan berarti referensi obyek yang dibandingkan mengacu pada   objek yang sama. Persamaan bitwise berarti objek yang dibandingkan miliki   representasi biner yang sama.


5
2017-08-16 14:17



Dalam arti apakah dua entri sama? Apakah ToString mereka () sama? Dalam hal itu cukup untuk menganggap mereka sama dalam ujian, lalu bandingkan dua ToString () nilai untuk eachother.

Jika Anda perlu membandingkan kedua DirectoryEntries, terapkan sebuah IEqualityComparer kustom dan gunakan itu untuk membandingkan untuk kesetaraan dalam ujian.


2
2017-08-16 14:15