默认情况下将 Moq CallBase 设置为 true

Set Moq CallBase to be true by default

在这里查看我为什么要在我的 Mock 对象上设置 CallBase: How to use moq to test a concrete method in an abstract class?

最好不要在我的每个模拟对象上都设置它。

有什么办法可以全局设置吗? 例如我可以在我的 [TestSetup] 方法中放入一些像 Moq.Settings.CallBaseDefault = true 这样的语法?

不确定这样的设置是否开箱即用。 我建议将 new Mock<Concrete> { CallBase = true }; 包装在工厂中。

public static class MockFactory
{
    public static Mock<T> Create<T>() where T : class
    {
        return new Mock<T> { CallBase = true };
    }
}

创建模拟时只需使用:

var mock = MockFactory.Create<Concrete>();

Amol 建议的解决方案或多或少已经内置到 Moq 中。

如果您使用:

MockRepository factory =
        new MockRepository(MockBehavior.Loose) { CallBase = true, };

然后代码如下:

var mock = factory.Create<Concrete>();

将创建一个 CallBase 为 true 的松散模拟。

(对于 Strict 模拟,将 CallBase 属性 设置为 true 是没有意义的。对于他们,做一个明确的 mock.Setup(x => x.MemberToUse).CallBase(); 为每个 class 成员(方法或 属性)在你想要的地方。)