gpt4 book ai didi

FakeItEasy ReturnsLazily with out 参数

转载 作者:行者123 更新时间:2023-12-04 02:47:47 26 4
gpt4 key购买 nike

我刚开始使用 FakeItEasy,第一次尝试就卡住了。我想伪造的接口(interface)有这样的方法:

byte[] ReadFileChunk(string path,int offset,int count,out long size);

我想看看参数是如何传递的,所以我使用了 ReturnsLazily。这是我的尝试:

long resSize;
A.CallTo(() => dataAttributesController
.ReadFileChunk(A<string>.Ignored, A<int>.Ignored, A<int>.Ignored, out resSize))
.ReturnsLazily((string path, int offset, int count) =>
{
return Encoding.UTF8.GetBytes("You requested: " + path + "(" + offset + "," + count + ")");
})
.AssignsOutAndRefParameters(123);

这会编译,但在运行时会生成此异常:

The faked method has the signature (System.String, System.Int32, System.Int32, System.Int64&), but returns lazily was used with (System.String, System.Int32, System.Int32).

这是正确的,但我不知道如何添加 out 参数。如果我将 ReturnLazily 部分更改为此:

.ReturnsLazily((string path, int offset, int count, out long size) =>
{
size = 0;
return Encoding.UTF8.GetBytes("You requested: " + path + "(" + offset + "," + count + ")");
})

它不会编译,我不明白错误:

error CS1593: Delegate 'System.Func<FakeItEasy.Core.IFakeObjectCall,byte[]>' does not take 4 arguments
error CS1661: Cannot convert lambda expression to delegate type 'System.Func<string,int,int,long,byte[]>' because the parameter types do not match the delegate parameter types
error CS1677: Parameter 4 should not be declared with the 'out' keyword

对于像我这样的新手,这看起来不喜欢 4 个参数,也不理解如何处理“out”。有人可以解释一下我应该如何阅读这些错误吗?一个工作示例也将非常受欢迎:-)

非常感谢!

--- 编辑 ---

这似乎可行:

A.CallTo(() => dataAttributesController
.ReadFileChunk(A<string>.Ignored, A<int>.Ignored, A<int>.Ignored, out resSize))
.ReturnsLazily(x =>
Encoding.UTF8.GetBytes("You requested: " + x.Arguments.Get<string>(0) + "(" + x.Arguments.Get<int>(1) + "," + x.Arguments.Get<int>(2) + ")"))
.AssignsOutAndRefParameters((long)123);

比我希望的可读性差一点,这是否接近 ReturnsLazily 的预期用途?

最佳答案

那个界面在你的控制之下吗?

byte[] ReadFileChunk(string path, int offset, int count, out long size);

如果是这样: out long size 是否与返回的 byte[] 的大小相同?在那种情况下,我会从接口(interface)方法中删除 size 参数,并按照您的预期使用“nice-to-read”ReturnsLazily 方法。

关于FakeItEasy ReturnsLazily with out 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18527635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com