Moq confusion - Setup() v Setup<>()

本文关键字:Setup confusion gt lt Moq | 更新日期: 2023-09-27 18:03:01

我创建了一个模拟,如下所示:

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

Setup方法的智能感知如下:

"为调用void指定模拟类型上的设置返回的方法。"

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

另一个设置方法定义为Setup<>,我可以这样创建我的模拟:

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

这个Setup方法的智能感知状态为:

"为调用指定模拟类型上的设置返回的方法。"



。无论我选择哪种方法,它都可以编译和测试。我不知道该怎么做。.Setup()和.Setup<>()之间的区别是什么,我做得对吗?

我们可以说Moq的文档有些缺乏。:)

Moq confusion - Setup() v Setup<>()

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