如何模拟特定的方法,并将其余方法引导到接口的特定实现

本文关键字:方法 实现 接口 余方法 何模拟 模拟 | 更新日期: 2023-09-27 18:07:04

我有以下接口:

public interface IFoo
{
    int Prop1 { get; set; }
    string Prop2 { get; set; }
    string Method1();
    string Method2();
}

这是一个实现:

public class FooImplementation : IFoo
{
    public override int Prop1 { ... }
    public override string Prop2 { ... }
    public override string Method1() { ... }
    public override string Method2() { ... }
}

我想模拟Prop2Method2,对于剩余的属性/方法,我想在实现中调用相应的属性/方法。而不是描述性地提及Mock.Setup(..)为每个属性/方法,有一个直接的方式来实现这一点?

我可以选择性地模拟属性和方法并将其余部分重定向到实现吗?

如何模拟特定的方法,并将其余方法引导到接口的特定实现

是的,Moq有一个名为CallBase的属性。你可以输入:

Mock<FooImplementation> mock = new Mock<FooImplementation>();
mock.CallBase = true;

如果你想要一个接口类型的Mock而不是特定的实现,你可以使用Moq的As来获得正确的类型:

Mock<Foo> mock = new Mock<FooImplementation>().As<Foo>();
mock.CallBase = true;