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

And*_*ndy 6 c# unit-testing moq

我有一个像这样的模拟:

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

Setup方法的intellisense说:

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

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

另外,另一个Setup方法定义为Setup <>,我可以像这样创建我的mock:

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

此Setup方法的intellisense指出:

"指定模拟类型的设置,以调用 返回方法."

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

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

cdh*_*wie 8

编译器从传递给Setup()你的lambda推断你打算调用泛型版本,所以它很乐意为你推断泛型参数.如果您使用Reflector,您将看到第一个代码示例实际上正在调用Setup<byte[]>().

  • 不,两种方法都不一样.事实上,intellisense无法推断使用情况,因此它为您提供了没有泛型类型的方法的描述. (3认同)