使用Moq,我需要在现有的类(不是接口*)上创建一个虚假的 no default ctor 。
我可以使用"传统"语法:
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);
-
*我想要使用界面。但后来现实发生了。我们不要进入它。
答案 0 :(得分:2)
不,似乎无法做到这一点。
旁注:在“旧”语法中,您只需写:
new Mock<DataResponse>(0, 0, 0, new byte[0]) //specify ctor arguments
,因为数组参数有 params
(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
但当然,这并不是你要求的一部分。