Banyak jawaban bagus di sini! Pergilah dengan set fitur yang ada di luar kotak Moq sampai Anda perlu membuat pernyataan tentang beberapa parameter kelas yang diteruskan ke dependensi Anda. Jika Anda berakhir dalam situasi itu, fitur Verifikasi Moq dengan It. Pencocokan tidak melakukan pekerjaan yang baik untuk mengisolasi kegagalan tes, dan cara Pengembalian / Panggilan Balik untuk menangkap argumen menambahkan baris kode yang tidak perlu ke pengujian Anda (dan tes panjang adalah jalan keluar bagi saya).
Berikut adalah intinya: https://gist.github.com/Jacob-McKay/8b8d41ebb9565f5fca23654fd944ac6b dengan ekstensi Moq (4,12) yang saya tulis yang memberikan cara yang lebih deklaratif untuk membuat pernyataan tentang argumen yang dilontarkan ke ejek, tanpa kekurangan yang disebutkan di atas. Berikut ini bagian Verify sekarang:
mockDependency
.CheckMethodWasCalledOnce(nameof(IExampleDependency.PersistThings))
.WithArg<InThing2>(inThing2 =>
{
Assert.Equal("Input Data with Important additional data", inThing2.Prop1);
Assert.Equal("I need a trim", inThing2.Prop2);
})
.AndArg<InThing3>(inThing3 =>
{
Assert.Equal("Important Default Value", inThing3.Prop1);
Assert.Equal("I NEED TO BE UPPER CASED", inThing3.Prop2);
});
Saya akan terpacu jika Moq menyediakan fitur yang melakukan hal yang sama sementara menjadi deklaratif dan menyediakan isolasi kegagalan ini. Semoga saja!