A.Fake<Stream>().Read(...) throwing InvalidOperationEx
本文关键字:Read throwing InvalidOperationEx Stream Fake lt gt | 更新日期: 2023-09-27 18:02:47
使用NUnit 2.6.4 &FakeItEasy 1.25.2在Visual Studio 2013 Community Edition中对c#代码进行单元测试
下面的测试片段按预期执行
[Test]
public void test_whatIsUpWithStreamRead()
{
Stream fakeStream = A.Fake<Stream>();
byte[] buffer = new byte[16];
int numBytesRead = fakeStream.Read(buffer, 0, 16);
Assert.AreEqual(0, numBytesRead);
}
然而,只要我用CallTo/Returns()或ReturnsLazily()语句装饰我的假…
[Test]
public void test_whatIsUpWithStreamRead()
{
Stream fakeStream = A.Fake<Stream>();
A.CallTo(() => fakeStream.Read(A<byte[]>.Ignored, A<int>.Ignored, A<int>.Ignored)).Returns(1);
byte[] buffer = new byte[16];
int numBytesRead = fakeStream.Read(buffer, 0, 16);
Assert.AreEqual(1, numBytesRead);
}
fakeStream.Read()
抛出一个System。InvalidOperationException的消息:
"指定的out和ref参数的个数与调用中的out和ref参数的个数不匹配。"
来自FakeItEasy.Configuration.BuildableCallRule.ApplyOutAndRefParametersValueProducer(IInterceptedFakeObjectCall fakeObjectCall)
,这对我来说很奇怪,因为Stream.Read()
没有任何out/ref参数。
这是一个bug,我应该在https://github.com/FakeItEasy报告,还是我错过了什么?
thx
更新:该错误已在FakeItEasy 1.25.3和FakeItEasy 2.0.0中修复。
是的,这是一个错误,似乎是在1.23.0中引入的。我创造了第508期。我将在不久的将来修复工作,并将与其他项目所有者讨论在哪个版本中我们想要发布修复。如果你有什么意见,就过来吧。
与此同时,一个可能的解决方案是回滚到FakeItEasy 1.22.0,如果你不需要在后续版本中添加的任何增强和错误修复。
如果这不是一个选项,也许可以考虑抽象掉Stream.Read
并伪造抽象。或者回来,我很乐意讨论其他途径