2011-09-06 55 views
2

由于有共同起订量2个接口具有相同的功能

public interface I1 { void Foo(string p);}; 
public interface I2 { void Foo(string p);}; 

一个功能2个接口,我们使用MOQ创建这两个接口的模拟

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

的问题是,当你调用foo I2

(menuServiceMock.Object as I2).Foo("foo"); // in real code, we have a handle on I2 

你不能用验证:

menuServiceMock.Verify(x => x.Foo("foo"), Times.Once()); 

...因为只有对I1 :: Foo的调用才被计数。

我们该如何克服这一点(除了在模拟构造中反转I1和I2)?

回答

1

我认为你需要做的是:

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()); 
+0

从来没有注意到的是,“由于”函数返回的东西:) – sthiers