【问题标题】:FakeItEasy AssignsOutAndRefParameters - lazily?FakeItEasy AssignsOutAndRefParameters - 懒惰?
【发布时间】:2014-05-30 16:14:14
【问题描述】:

我试图伪造一个带有 out 参数的方法的调用,其中带有一个带有一些基本逻辑的 ReturnsLazily。理想情况下,我可以通过基于 ReturnsLazily 的 AssignsOutAndRefParameters 分配一个值。但是,AssignsOutAndRefParameters 仅在编译表达式时预先接受一个值,我是否缺少任何“懒惰”类型的行为?

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]

【问题讨论】:

    标签: fakeiteasy


    【解决方案1】:

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

    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 来跟踪它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2012-06-02
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      相关资源
      最近更新 更多