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

时间:2015-03-11 19:31:00

标签: testing moq abstract

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

不必在我的每个模拟对象上设置它都会很好。

有没有办法全局设置? 例如我可以在Moq.Settings.CallBaseDefault = true方法中添加[TestSetup]之类的语法吗?

2 个答案:

答案 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>();