使用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参数。我应该在https://github.com/FakeItEasy报告这个问题吗?还是我漏掉了什么?
谢谢。