C# 为特定索引伪造对数组的调用会引发异常

C# 为特定索引伪造对数组的调用会引发异常,c#,fakeiteasy,C#,Fakeiteasy,具有以下单元测试: public interface ITestMe { object[] Values { get; } } [Test] public void Test () { var sut = A.Fake<ITestMe> (); A.CallTo (() => sut.Values[0]).Returns (4); Assert.That (sut.Values[0], Is.EqualTo (4)); } 或者可能我不知道

具有以下单元测试:

public interface ITestMe
{
    object[] Values { get; }
}

[Test]
public void Test ()
{
    var sut = A.Fake<ITestMe> ();
    A.CallTo (() => sut.Values[0]).Returns (4);

    Assert.That (sut.Values[0], Is.EqualTo (4));
}

或者可能我不知道如何为索引器指定一个伪值?

问题源于
不是索引器这一事实。 它是一个返回数组的属性

未配置的
将返回长度为零的数组(因为数组不可伪造)。这就是这里发生的事情,如果执行sut.Values[0],它将失败(Fakeitesy不会这样做)

因此,这里真正需要做的是,由于
Values
是一个数组,它是不可伪造的(请参阅),因此无法让fakeitesy为特定偏移量选择返回值。正如@CharlesMager所建议的那样,最好的方法是让
返回您选择的数组。例如:

var myArray = new object[100];
myArray[0] = 4;
myArray[50] = 17;
A.CallTo(() => sut.Values).Returns(myArray);

为什么不伪造阵列呢
A.CallTo(()=>sut.Values)。返回(新对象[]{4})
@CharlesMager:请参阅Blair答案下的注释。好的,获取数组的第一项就可以了。但是图中是100个项目的数组,我想配置第50个项目;myArray[50]=17;A.CallTo(()=>sut.Values).Returns(myArray)似乎是一种方式。我想我缺少了一个流畅的语法。请参阅更新的答案,了解更多关于数组没有伪造功能的信息,因为数组是不可伪造的。我早该想到把它放进去的。
var myArray = new object[100];
myArray[0] = 4;
myArray[50] = 17;
A.CallTo(() => sut.Values).Returns(myArray);