混合使用来自同一类的已实现方法和模拟方法

问题描述

我正在尝试模拟类的某些方法,同时保留其他方法的真实实现。

现在,我确实发现了与stackoverflow here相关的内容。但是,没有建议的答案对我有帮助。

李的答案在大多数情况下可能是好的,但是在我的情况下这是不合适的,因为我真的需要模拟接口(具有各种实现)而不是类本身。

布兰登的答案非常接近,但我发现了以下建议。
这是为方便起见粘贴的他的代码:

var mock = new Mock<ITestClass>(); // Create Mock of interface

// Create instance of ITestClass implementation you want to use
var inst = new ActualTestClass();

// Setup to call method of an actual instance
// if method returns void use mock.Setup(...).Callback(...)
mock.Setup(m => m.SomeMethod(It.IsAny<int>())
    .Returns((int x) => inst.SomeMethod(x));

引起我问题的是,该示例适用于简单的场景,但是如果“ SomeMethod()”调用它从具有模拟设置的ITestClass中调用另一个方法,则该示例将不起作用。在这种情况下,“ SomeMethod()”仍将使用实际实现。

为清楚起见:
说ITestClass实现方法SomeMethod和SomeOtherMethod。前者必须调用按以下方式嘲笑的后者:

mock.Setup(m => m.SomeOtherMethod(It.IsAny<bool>())
     .Returns(true);

现在该模拟方法如何由SomeMethod代替真正的实现使用?

编辑

我需要模拟一个接口而不是类本身的另一个原因是,如果它是单例,则后一个选项将不允许您测试TestClass()。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)