Хоча я погоджуюся, що відповідь @ Павла - це рекомендований шлях, я просто хочу додати один альтернативний шлях, який забезпечується moqвиключенням самості.
Так як SomeClassце abstractце дійсно mockable, але public void SomeMehod()це не так . Сенс полягає в тому, щоб знайти спосіб знущатися і якось викликати цей метод, а потім за допомогою CallBaseрозповсюдження виклику до SomeOtherMethod(). Це може звучати як хак, але по суті це просто. Він може бути використаний у тому випадку, якщо запропонований рефакторинг неможливий.
// This class is used only for test and purpose is make SomeMethod mockable
public abstract class DummyClass : SomeClass
{
public virtual void DummyMethod() => base.SomeMethod();
}
Тоді ви можете налаштувати DummyMethod()розповсюдження дзвінка, встановивши CallBaseпрапор.
//Arrange
var mock = new Mock<DummyClass>();
mock.Setup(m => m.DummyMethod()).CallBase();
//Act
mock.Object.SomeMethod();
//Assert
mock.Verify(m => m.SomeOtherMethod(), Times.Once);