Meskipun saya setuju bahwa jawaban @ Paul adalah cara yang disarankan untuk pergi, saya hanya ingin menambahkan satu cara alternatif yang disediakan oleh moqdiri sendiri.
Sejak SomeClassadalah abstractmemang mockable, tapi public void SomeMehod()tidak. Intinya adalah menemukan cara untuk mengejek dan entah bagaimana memanggil metode itu dan kemudian menggunakan CallBasemenyebarkan 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 CallBasebendera.
//Arrange
var mock = new Mock<DummyClass>();
mock.Setup(m => m.DummyMethod()).CallBase();
//Act
mock.Object.SomeMethod();
//Assert
mock.Verify(m => m.SomeOtherMethod(), Times.Once);