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
adalah abstract
memang mockable, tapi public void SomeMehod()
tidak. Intinya adalah menemukan cara untuk mengejek dan entah bagaimana memanggil metode itu dan kemudian menggunakan CallBase
menyebarkan panggilan ke Internet SomeOtherMethod()
. Mungkin terdengar seperti retasan tetapi intinya sederhana. Ini dapat digunakan dalam kasus jika refactoring yang diusulkan tidak dimungkinkan.
// This class is used only for test and purpose is make SomeMethod mockable
public abstract class DummyClass : SomeClass
{
public virtual void DummyMethod() => base.SomeMethod();
}
Kemudian Anda dapat mengatur DummyMethod()
untuk menyebarkan panggilan dengan mengatur CallBase
bendera.
//Arrange
var mock = new Mock<DummyClass>();
mock.Setup(m => m.DummyMethod()).CallBase();
//Act
mock.Object.SomeMethod();
//Assert
mock.Verify(m => m.SomeOtherMethod(), Times.Once);