Хоча я погоджуюся, що відповідь @ Павла - це рекомендований шлях, я просто хочу додати один альтернативний шлях, який забезпечується 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);