Я не думаю, что это возможно с NSubstitute или с. NET в целом. NSubstitute поддерживает частичные mocks , но это для каждого члена.
Так что вы можете сделать так, чтобы он вызывал ConcreteImplementation2.DoSomething
, но эта реализация вызывает base.DoSomething
, так что будет выполняться:
var sub = Substitute.For<ConcreteImplementation2>();
sub.When(x => x.DoSomething()).CallBase();
NSubstitute работает путем реализации / подклассификации типа , поэтому хорошее правило заключается в том, что если вы не можете сделать что-то вручную с помощью подкласса, NSubstitute не будет быть в состоянии сделать это либо.
В этом случае, если вы создадите class ConcreteImplementation3 : ConcreteImplementation2
и переопределите DoSomething
, сможете ли вы позвонить ConcreteImplementation2.DoSomething
без его вызова SomeBaseClass.DoSomething
? В этом случае я думаю, что ответ - нет, поэтому NSubstitute также не сможет этого сделать.