【问题标题】:A.Fake<Stream>().Read(...) throwing InvalidOperationExceptionA.Fake<Stream>().Read(...) 抛出 InvalidOperationException
【发布时间】:2015-10-03 19:55:34
【问题描述】:

在 Visual Studio 2013 Community Edition 中使用 NUnit 2.6.4 和 FakeItEasy 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);

}

但是,一旦我用 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() 没有任何输出/引用参数。

这是我应该在https://github.com/FakeItEasy 报告的错误,还是我遗漏了什么?

谢谢

【问题讨论】:

  • 我不确定你是否看到了更新,但我们相信这个问题会在 FakeItEasy 1.25.3 中得到解决。

标签: c# fakeiteasy


【解决方案1】:

更新:已修复FakeItEasy 1.25.3FakeItEasy 2.0.0 中的错误。


是的,这是一个错误,似乎已在 1.23.0 中引入。 我创建了issue 508。 我将在不久的将来进行修复,并将与其他项目所有者讨论我们希望在哪个版本中发布修复。如果您有意见,请前往。

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

如果这不是一个选项,也许可以考虑抽象出 Stream.Read 并伪造抽象。或者回来,我很乐意讨论其他途径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多