首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FakeItEasy AssignsOutAndRefParameters -懒惰?

FakeItEasy AssignsOutAndRefParameters -懒惰?
EN

Stack Overflow用户
提问于 2014-05-31 00:14:14
回答 1查看 439关注 0票数 3

我试图伪造一个带有out参数的方法调用,其中包含一个包含一些基本逻辑的ReturnsLazily。理想情况下,我可以根据ReturnsLazily通过AssignsOutAndRefParameters赋值。然而,AssignsOutAndRefParameters只在编译表达式时预先接受一个值,我是否遗漏了任何“惰性”类型行为?

代码语言:javascript
复制
Random r = new Random();    

int[] value = new int[] { 1 };
A.CallTo(() => loader.TryLoad(A<int>.Ignored, out value))
    .WithAnyArguments()
    .ReturnsLazily((int key, int[] inValue) =>
    {
        List<int> result = new List<int>();
        if (key > 0)
        {
            for (int i = 0; i < r.Next(100); i++)
            {
                result.Add(r.Next());
            }
        }
        value = result.ToArray();
        return result.Count > 0;
    })
    .AssignsOutAndRefParameters(value); //Assigns [1], instead of [r,a,n,d,o,m,i,n,t,s]
EN

回答 1

Stack Overflow用户

发布于 2014-05-31 03:34:27

更新@Crutt所知的,FakeItEasy 1.22.0+ has AssignsOutAndRefParametersLazily,它完全支持所需的行为:

代码语言:javascript
复制
Random r = new Random();    

int[] value = new int[] { 1 };
A.CallTo(() => loader.TryLoad(A<int>.Ignored, out value))
    .WithAnyArguments()
    .ReturnsLazily((int key, int[] inValue) => key > 0)
    .AssignsOutAndRefParametersLazily((int key, int[] inValue) =>

    {
        List<int> result = new List<int>();
        if (key > 0)
        {
            for (int i = 0; i < r.Next(100); i++)
            {
                result.Add(r.Next());
            }
        }
        return new object[] { result.ToArray() };
    });

不,我认为你已经发现了一些功能可能存在的漏洞。从FakeItEasy 1.21.0开始,这似乎不受支持。

我在GitHub上创建了Issue 319来跟踪它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23958995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档