@ Paul'un cevabının tavsiye edilen yol olduğunu kabul etsem de, sadece kendim tarafından sağlanan alternatif bir yol eklemek istiyorum moq.
Yana SomeClassolduğunu abstractgerçekten mockable, ama public void SomeMehod()değil. Mesele, bu yöntemi alay etmenin ve bir şekilde bu yöntemi çağırmanın ve ardından CallBaseçağrıyı SomeOtherMethod(). Bir saldırı gibi gelebilir ama özünde basittir. Önerilen yeniden düzenleme işleminin mümkün olmadığı durumlarda kullanılabilir.
// This class is used only for test and purpose is make SomeMethod mockable
public abstract class DummyClass : SomeClass
{
public virtual void DummyMethod() => base.SomeMethod();
}
Ardından DummyMethod(), CallBasebayrağı ayarlayarak çağrıyı yaymak için ayarlayabilirsiniz .
//Arrange
var mock = new Mock<DummyClass>();
mock.Setup(m => m.DummyMethod()).CallBase();
//Act
mock.Object.SomeMethod();
//Assert
mock.Verify(m => m.SomeOtherMethod(), Times.Once);