Moq混淆 - 设置()v设置<>()

时间:2011-07-20 19:35:40

标签: c# unit-testing moq

我有一个像这样的模拟:

var mock = new Mock<IPacket>(MockBehavior.Strict);
mock.Setup(p => p.GetBytes()).Returns(new byte[] { }).Verifiable();

Setup方法的intellisense说明了这一点:

  

“指定模拟类型的设置,以调用 void   返回方法。“

但是模拟方法p.GetBytes()不返回void,它返回一个字节数组。

另外,另一个Setup方法被定义为Setup&lt;&gt;,我可以像这样创建我的模拟:

var mock = new Mock<IPacket>(MockBehavior.Strict);
mock.Setup<byte[]>(p => p.GetBytes()).Returns(new byte[] { }).Verifiable();

此Setup方法的intellisense指出:

  

“指定模拟类型的设置,用于调用   返回方法。“



无论我选择哪种方法,它都可以编译和测试。所以,我很困惑我应该采取哪种方式。 .Setup()和.Setup&lt;&gt;()有什么区别,我做得对吗?

我们说,Moq的文档有点缺乏。 :)

1 个答案:

答案 0 :(得分:8)

编译器从传递给Setup()的lambda推断出你打算调用泛型版本,因此很高兴为你推断出泛型参数。如果您使用Reflector,您将看到第一个代码示例实际上是调用Setup<byte[]>()