Несмотря на то, что я согласен с тем, что ответ @ Paul - рекомендуемый путь, я просто хочу добавить один альтернативный путь, который обеспечивается самим moq
собой.
Так SomeClass
как abstract
это действительно издевательство, но 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);