Невозможно применить индексирование с помощью [] к выражению типа 'Castle.Proxies.RangeProxy' - PullRequest
0 голосов
/ 01 июня 2018

Что вызывает это исключение?Я пытаюсь использовать Moq, чтобы издеваться над Microsoft.Office.Interop.Excel.Range.Я хочу вложить в него еще одну издевательскую Range.Но когда я пытаюсь получить доступ к вложенному исключению, генерируется исключение.

Исключение

Невозможно применить индексирование с [] к выражению типа 'Castle.Proxies.RangeProxy '

Код

[TestMethod]
public void RangeProxyIndexTest()
{
    // creating first range
    var cell1 = new Moq.Mock<Range>();
    cell1.Setup(c => c.Value2).Returns("1");

    var range1Mock = new Moq.Mock<Range>();
    range1Mock.SetupGet(r => r[1, Moq.It.IsAny<Object>()]).Returns(cell1.Object);
    var range1 = range1Mock.Object;

    // creating second range
    var cell2 = new Moq.Mock<Range>();
    cell2.Setup(c => c.Value2).Returns("2");

    var range2Mock = new Moq.Mock<Range>();
    range2Mock.SetupGet(r => r[1, Moq.It.IsAny<Object>()]).Returns(cell2.Object);
    var range2 = range2Mock.Object;

    // merging both ranges into 1
    var range3Mock = new Moq.Mock<Range>();
    range3Mock.SetupGet(r => r[1, Moq.It.IsAny<Object>()]).Returns(range1);
    range3Mock.SetupGet(r => r[2, Moq.It.IsAny<Object>()]).Returns(range2);
    var range3 = range3Mock.Object;

    // testing succeeds
    Assert.AreEqual("1", range1[1].Value2);
    Assert.AreSame(range1, range3[1]);
    Assert.AreEqual("2", range2[1].Value2);
    Assert.AreSame(range2, range3[2]);

    // exceptions are thrown here
    Assert.AreEqual("1", range3[1][1].Value2);
    Assert.AreEqual("2", range3[2][1].Value2);
}

1 Ответ

0 голосов
/ 02 июня 2018

Хотя ситуация иная, причина этого исключения точно такая же, как и у другого вопроса, который вы открыли.

Измените свою часть проверки на:

Assert.AreEqual("1", (range3[1] as Range)[1].Value2);
Assert.AreEqual("2", (range3[2] as Range)[1].Value2);

Для получения дополнительной информации прочитайте этот ответ.

...