C# 具有相同功能的2个接口上的Moq

C# 具有相同功能的2个接口上的Moq,c#,interface,moq,C#,Interface,Moq,给定两个具有一个共同功能的接口 public interface I1 { void Foo(string p);}; public interface I2 { void Foo(string p);}; 我们使用moq创建两个接口的模拟 Mock<I1> menuServiceMock = new Mock<I1>(); menuServiceMock.As<I2>(); 您无法通过以下方式进行验证: menuServiceMock.Verify(x

给定两个具有一个共同功能的接口

public interface I1 { void Foo(string p);};
public interface I2 { void Foo(string p);};
我们使用moq创建两个接口的模拟

Mock<I1> menuServiceMock = new Mock<I1>();
menuServiceMock.As<I2>();
您无法通过以下方式进行验证:

menuServiceMock.Verify(x => x.Foo("foo"), Times.Once());
…因为只计算对I1::Foo的调用


我们如何克服这个问题(除了在模拟构造中反转I1和I2)?

我认为您需要这样做:

Mock<I1> menuServiceMock = new Mock<I1>();
var i2Mock = menuServiceMock.As<I2>();

// Verifies that I2.Foo was called on the object
i2Mock.Verify(x => x.Foo("foo"), Times.Once());
// Verifies that I1.Foo was called on the object:
menuServiceMock.Verify(x => x.Foo("foo"), Times.Once());
Mock menuServiceMock=new Mock();
var i2Mock=menuServiceMock.As();
//验证是否对对象调用了I2.Foo
i2Mock.Verify(x=>x.Foo(“Foo”),Times.Once());
//验证是否对对象调用了I1.Foo:
menuServiceMock.Verify(x=>x.Foo(“Foo”),Times.Once();
从未注意到“As”函数返回了某些内容:)
Mock<I1> menuServiceMock = new Mock<I1>();
var i2Mock = menuServiceMock.As<I2>();

// Verifies that I2.Foo was called on the object
i2Mock.Verify(x => x.Foo("foo"), Times.Once());
// Verifies that I1.Foo was called on the object:
menuServiceMock.Verify(x => x.Foo("foo"), Times.Once());