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