gpt4 book ai didi

c# - 如何使用 Mock.Of() 模拟没有默认构造函数的类?

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:44 25 4
gpt4 key购买 nike

使用 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

但这当然不是您所要求的真正一部分。

关于c# - 如何使用 Mock.Of<T>() 模拟没有默认构造函数的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31960559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com