我有以下接口:
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() { ... }
}
我想模拟Prop2
和Method2
,对于剩余的属性/方法,我想在实现中调用相应的属性/方法。而不是描述性地提及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;