A.Fake<Stream>().Read(...) 抛出 InvalidOperationException
A.Fake<Stream>().Read(...) throwing InvalidOperationException
使用 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 消息:
"The number of values for out and ref parameters specified does not match the number of out and ref parameters in the call."
来自 FakeItEasy.Configuration.BuildableCallRule.ApplyOutAndRefParametersValueProducer(IInterceptedFakeObjectCall fakeObjectCall)
,这对我来说很奇怪,因为 Stream.Read()
没有任何 out/ref 参数。
这是我应该在 https://github.com/FakeItEasy 报告的错误,还是我遗漏了什么?
感谢
更新:错误已在 FakeItEasy 1.25.3 and FakeItEasy 2.0.0 中修复。
是的,这是一个错误,似乎是在 1.23.0 中引入的。
我创建了 issue 508。
我将在不久的将来进行修复,并将与其他项目所有者讨论我们希望发布修复的版本。有意见就过来
与此同时,一种可能的解决方法是回滚到 FakeItEasy 1.22.0,如果您不需要后续版本中添加的任何增强功能和错误修复。
如果这不是一个选项,或许可以考虑抽象化 Stream.Read
并伪造抽象化。或者回来,我很乐意讨论其他路径。
使用 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 消息:
"The number of values for out and ref parameters specified does not match the number of out and ref parameters in the call."
来自 FakeItEasy.Configuration.BuildableCallRule.ApplyOutAndRefParametersValueProducer(IInterceptedFakeObjectCall fakeObjectCall)
,这对我来说很奇怪,因为 Stream.Read()
没有任何 out/ref 参数。
这是我应该在 https://github.com/FakeItEasy 报告的错误,还是我遗漏了什么?
感谢
更新:错误已在 FakeItEasy 1.25.3 and FakeItEasy 2.0.0 中修复。
是的,这是一个错误,似乎是在 1.23.0 中引入的。 我创建了 issue 508。 我将在不久的将来进行修复,并将与其他项目所有者讨论我们希望发布修复的版本。有意见就过来
与此同时,一种可能的解决方法是回滚到 FakeItEasy 1.22.0,如果您不需要后续版本中添加的任何增强功能和错误修复。
如果这不是一个选项,或许可以考虑抽象化 Stream.Read
并伪造抽象化。或者回来,我很乐意讨论其他路径。