Вы не можете заархивировать то, что вы хотите, используя interface
. На самом деле, вы можете, но насмешливо abc
вызвать def
, что немного неловко:
mock.Setup(x => x.abc()).Returns(() => mock.Object.def());
Хотя я не вижу в этом смысла, вместо этого вы можете просто высмеивать abc
.. .
Единственный способ архивировать то, что вы хотите, используя макет, это использовать актуальную функцию class
и Callbase
.
public class Foo : IFoo
{
public virtual string abc() //methods have to be virtual to be mockable
{
return def();
}
public virtual string def() //methods have to be virtual to be mockable
{
return "123";
}
}
//setup
var mock = new Mock<Foo>();
mock.Setup(x => x.def()).Returns("abc");
mock.Setup(x => x.abc()).CallBase();
mock.Object.abc(); // "abc"
В этом случае вы настраиваете реальный класс вместо интерфейса, так что вам нужно немного реорганизовать свою реализацию. Не уверен, что это правильный подход, просто способ реализации вашего требования.