Ini adalah pemahaman saya bahwa saya dapat menguji bahwa pemanggilan metode akan terjadi jika saya memanggil metode tingkat yang lebih tinggi, yaitu:
public abstract class SomeClass()
{
public void SomeMehod()
{
SomeOtherMethod();
}
internal abstract void SomeOtherMethod();
}
Saya ingin menguji bahwa jika saya menelepon SomeMethod()
maka saya berharap itu SomeOtherMethod()
akan dipanggil.
Apakah saya benar berpikir tes semacam ini tersedia dalam kerangka mengejek?
Tidak, pengujian tiruan mengasumsikan Anda menggunakan pola desain tertentu yang dapat diuji, salah satunya adalah injeksi. Dalam kasus Anda, Anda akan menguji
SomeClass.SomeMethod
danSomeOtherMethod
harus diimplementasikan di entitas lain yang perlu dihubungkan.Someclass
Konstruktor Anda akan terlihat sepertiNew(ISomeOtherClass)
. Kemudian Anda akan mengejekISomeOtherClass
dan menetapkan harapanSomeOtherMethod
untuk dipanggil dan memverifikasi harapan.sumber
Meskipun saya setuju bahwa jawaban @ Paul adalah cara yang disarankan untuk pergi, saya hanya ingin menambahkan satu cara alternatif yang disediakan oleh
moq
diri sendiri.Sejak
SomeClass
adalahabstract
memang mockable, tapipublic void SomeMehod()
tidak. Intinya adalah menemukan cara untuk mengejek dan entah bagaimana memanggil metode itu dan kemudian menggunakanCallBase
menyebarkan panggilan ke InternetSomeOtherMethod()
. Mungkin terdengar seperti retasan tetapi intinya sederhana. Ini dapat digunakan dalam kasus jika refactoring yang diusulkan tidak dimungkinkan.Kemudian Anda dapat mengatur
DummyMethod()
untuk menyebarkan panggilan dengan mengaturCallBase
bendera.sumber