Cri*_*scu 5 c# unit-testing moq
使用 Moq,我需要在没有默认 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);
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法使用较新的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);
Run Code Online (Sandbox Code Playgroud)
--
* 我想使用一个界面。但后来现实发生了。我们先不深究。
不,似乎没有办法做到这一点。
旁注:在“旧”语法中,您可以编写:
new Mock<DataResponse>(0, 0, 0, new byte[0]) //specify ctor arguments
Run Code Online (Sandbox Code Playgroud)
因为存在数组参数params(参数数组)。
要解决0转换为 a 的问题MockBehavior(请参阅上面的注释和划掉的文本),您可以执行以下操作:
new Mock<DataResponse>(MockBehavior.Loose, 0, 0, 0, new byte[0]) //specify ctor arguments
Run Code Online (Sandbox Code Playgroud)
或者做:
var v = 0; // this v cannot be const!
// ...
new Mock<DataResponse>(v, 0, 0, new byte[0]) //specify ctor arguments
Run Code Online (Sandbox Code Playgroud)
但这当然不是您所要求的真正内容的一部分。
| 归档时间: |
|
| 查看次数: |
8849 次 |
| 最近记录: |