使用 Moq,我需要在现有的类(不是接口(interface)*)上创建一个伪造的没有默认构造函数。
我可以使用“传统”语法来做到这一点:
var fakeResponsePacket = new Mock<DataResponse>(
new object[]{0, 0, 0, new byte[0]}); //specify ctor arguments
fakeResponsePacket.Setup(p => p.DataLength).Returns(5);
var checkResult = sut.Check(fakeResponsePacket.Object);
我的问题是:有没有办法使用较新的 Mock.Of<T>()
来做同样的事情?语法 ?
据我所知,Mock.Of<T>
只有两个重载,它们都不接受参数:
//1 no params at all
var fakeResponsePacket = Mock.Of<DataResponse>(/*??*/);
fakeResponsePacket.DataLength = 5;
//2 the touted 'linq to Moq'
var fakeResponsePacket = Mock.Of<DataResponse>(/*??*/
p => p.DataLength == 5
);
var checkResult = sut.Check(fakeResponsePacket);
--
* 我想要使用一个接口(interface)。但后来现实发生了。我们先不谈了。
不,似乎没有办法做到这一点。
旁注:在“旧”语法中,您可以只写:
new Mock<DataResponse>(0, 0, 0, new byte[0]) //specify ctor arguments
因为数组参数有
params
(a
parameter array )。
要解决将 0
转换为 MockBehavior
的问题(请参阅上面的评论和划掉的文本),您可以这样做:
new Mock<DataResponse>(MockBehavior.Loose, 0, 0, 0, new byte[0]) //specify ctor arguments
或者做:
var v = 0; // this v cannot be const!
// ...
new Mock<DataResponse>(v, 0, 0, new byte[0]) //specify ctor arguments
但这当然不是您所要求的真正一部分。
我是一名优秀的程序员,十分优秀!