Bagaimana cara memverifikasi bahwa metode dipanggil tepat sekali dengan Moq? Hal Verify()
vs. Verifable()
benar-benar membingungkan.
112
Anda dapat menggunakan Times.Once()
, atau Times.Exactly(1)
:
mockContext.Verify(x => x.SaveChanges(), Times.Once());
mockContext.Verify(x => x.SaveChanges(), Times.Exactly(1));
Berikut adalah metode di kelas Times :
AtLeast
- Menentukan bahwa metode tiruan harus dipanggil sesingkat mungkin.AtLeastOnce
- Menentukan bahwa metode tiruan harus dipanggil minimal satu kali.AtMost
- Menentukan bahwa metode tiruan harus dipanggil waktu maksimum.AtMostOnce
- Menentukan bahwa metode tiruan harus dipanggil satu kali sebagai maksimum.Between
- Menentukan bahwa metode tiruan harus dipanggil antara dari dan ke waktu.Exactly
- Menentukan bahwa metode tiruan harus dipanggil tepat waktu.Never
- Menentukan bahwa metode tiruan tidak boleh dipanggil.Once
- Menentukan bahwa metode tiruan harus dipanggil tepat satu kali.Ingatlah bahwa mereka adalah pemanggilan metode; Saya terus tersandung, mengira itu properti dan melupakan tanda kurung.
var mockContext = new Mock<IContext>()
mengaturnya.AtLeast
,AtMost
,Between
, atauExactly
bisa dilihat sebagai properti. Maksud saya, mereka pasti membutuhkan parameter untuk melakukan sesuatu.Bayangkan kita sedang membangun kalkulator dengan satu metode untuk menambahkan 2 bilangan bulat. Mari kita bayangkan lebih lanjut persyaratannya adalah ketika metode add dipanggil, ia memanggil metode cetak sekali. Berikut adalah cara kami menguji ini:
Dan inilah tes sebenarnya dengan komentar di dalam kode untuk klarifikasi lebih lanjut:
Catatan : Secara default Moq akan menghentikan semua properti dan metode segera setelah Anda membuat objek Mock. Jadi bahkan tanpa menelepon
Setup
, Moq telah mematikan metodeIPrinter
sehingga Anda bisa meneleponVerify
. Namun, sebagai praktik yang baik, saya selalu menyiapkannya karena kita mungkin perlu menerapkan parameter ke metode untuk memenuhi ekspektasi tertentu, atau nilai kembalian dari metode untuk memenuhi ekspektasi tertentu atau berapa kali ia dipanggil.sumber
Verify
,Times.Once
tanpa pernah meneleponSetup
. Saya pasti berharapVerify
untuk meledak dalam kasus itu, tetapi ternyata tidak.Mock
objek. Jadi bahkan tanpa meneleponSetup
, Moq telah mematikan metodeIPrinter
sehingga Anda bisa meneleponVerify
. Namun, sebagai praktik yang baik, saya selalu menyiapkannya karena kita mungkin perlu menerapkan parameter ke metode atau nilai kembalian dari metode tersebut.Times.Exactly(1)
dan tidak gagal ketika metode itu sebenarnya dipanggil dua kali. Hanya setelah menambahkanSetup
metode yang dimaksud apakah itu gagal dengan benar.Pengontrol uji dapat berupa:
Dan ketika metode DeleteCars dipanggil dengan id yang valid, maka kita dapat memverifikasi itu, Metode penghapusan layanan dipanggil tepat sekali oleh tes ini:
sumber