我试图伪造一个带有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]发布于 2014-05-31 03:34:27
更新@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来跟踪它。
https://stackoverflow.com/questions/23958995
复制相似问题