C# A.伪造<;溪流>;().读取(…)引发InvalidOperationException

C# A.伪造<;溪流>;().读取(…)引发InvalidOperationException,c#,fakeiteasy,C#,Fakeiteasy,在Visual Studio 2013社区版中使用NUnit 2.6.4和Fakeitesy 1.25.2对C代码进行单元测试 以下测试片段按预期执行 [Test] public void test_whatIsUpWithStreamRead() { Stream fakeStream = A.Fake<Stream>(); byte[] buffer = new byte[16]; int numBytesRead = fakeStream.Read(

在Visual Studio 2013社区版中使用NUnit 2.6.4和Fakeitesy 1.25.2对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);

}
[测试]
公共无效测试_whatisuphithstreamread()
{
流fakeStream=A.Fake();
字节[]缓冲区=新字节[16];
int numBytesRead=fakeStream.Read(缓冲区,0,16);
aresequal(0,numBytesRead);
}
然而,只要我用CallTo/Returns()或returnslazly()语句修饰我的伪代码

[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);

}
[测试]
公共无效测试_whatisuphithstreamread()
{
流fakeStream=A.Fake();
A.CallTo(()=>fakeStream.Read(A.Ignored,A.Ignored,A.Ignored)).Returns(1);
字节[]缓冲区=新字节[16];
int numBytesRead=fakeStream.Read(缓冲区,0,16);
Assert.AreEqual(1,numBytesRead);
}
fakeStream.Read()
抛出System.InvalidOperationException,并显示以下消息:

“指定的out和ref参数值的数量与调用中的out和ref参数的数量不匹配。”

fakeitesy.Configuration.BuildableCallRule.applyout和fparametersValueProducer(IInterceptedFakeObjectCall-fakeObjectCall)
,这对我来说很奇怪,因为
Stream.Read()
没有任何out/ref参数

这是我应该报告的bug,还是我遗漏了什么


thx

更新:该错误已在和中修复


是的,这是一个bug,它似乎是在1.23.0中引入的。 我创造了。 我将在不久的将来进行修复,并将与其他项目负责人讨论我们希望在哪个版本中发布修复。如果你有意见的话就过来

同时,如果您不需要后续版本中添加的任何增强功能和错误修复,一个可能的解决方法是回滚到FakeiTasy 1.22.0


如果这不是一个选项,也许考虑抽象掉<代码>流。或者回来,我很乐意讨论其他途径。

我不确定您是否看到了更新,但我们相信Fakeetisy 1.25.3可以解决这个问题。