在这里查看为什么我想在我的Mock对象上设置CallBase: How to use moq to test a concrete method in an abstract class?
不必在我的每个模拟对象上设置它都会很好。
有没有办法全局设置?
例如我可以在Moq.Settings.CallBaseDefault = true
方法中添加[TestSetup]
之类的语法吗?
答案 0 :(得分:1)
Amol建议的解决方案或多或少已经融入Moq。
如果您使用:
MockRepository factory =
new MockRepository(MockBehavior.Loose) { CallBase = true, };
然后代码如下:
var mock = factory.Create<Concrete>();
将使用CallBase
true创建一个松散的模拟。
(对于CallBase
模拟,将Strict
属性设置为true是没有意义的。对于它们,为每个类成员执行显式mock.Setup(x => x.MemberToUse).CallBase();
(方法或者你想要的地方。)
答案 1 :(得分:0)
不确定这样的设置是否可以开箱即用。
我建议将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>();