Ответ 1
Это, с уловом!
Вы должны убедиться, что метод B
является виртуальным и может быть переопределен.
Затем установите макет для вызова базовых методов всякий раз, когда настройка не предоставляется. Затем вы настраиваете B
, но не настраиваете A
. Поскольку A
не был настроен, будет вызываться фактическая реализация.
var myClassMock = new Mock<MyClass>();
myClassMock.Setup(x => x.B()); //mock B
myClassMock.CallBase = true;
MyClass obj = myClassMock.Object;
obj.A(); // will call the actual implementation
obj.B(); // will call the mock implementation
За кулисами Moq будет динамически создавать класс, который расширяет MyClass
и переопределяет B
.