默认情况下将 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 成员(方法或 属性)在你想要的地方。)
在这里查看我为什么要在我的 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 成员(方法或 属性)在你想要的地方。)