Тип возвращаемого массива двумерных объектов - NSubstitute - PullRequest
4 голосов
/ 28 марта 2012

Я получаю исключение для актеров

System.InvalidCastException: невозможно привести объект типа 'System.Object []' к типу System.Object [,] ' в Castle.Proxies.ITestProxy.Get2DArray () в Scratch.TestFixture.Get2DArray () в TestTest.cs: строка 17

снизу:

[TestFixture]
public class TestFixture
{
    [Test]
    public void Get2DArray()
    {
        Substitute.For<ITest>().Get2DArray().Returns(new object[1,1]);
    }
}

public interface ITest
{
    object[,] Get2DArray();
}

Кто-нибудь может пролить свет на это? Я думаю, что это NSubstitute ошибка?

Ответы [ 2 ]

4 голосов
/ 29 марта 2012

NSubstitute зависит от Castle, который зависит от Reflection.Emit, поэтому они обвиняют Reflection.Emit.

http://issues.castleproject.org/issue/DYNPROXY-154

Чтобы обойти вашу проблему, похоже, вы не можете использовать многомерные массивы. Обратите внимание, что ваше исключение действительно происходит на Get2DArray(), а не Returns.

Обратите внимание, что я лично работаю над фальшивым фреймворком, который НЕ использует Reflection.Emit (в том числе Касла). Пройдет несколько недель, прежде чем даже Альфа будет готова, но это довольно мощный инструмент. Есть много сценариев, в которых Касл терпит неудачу, что я не делаю (мой сайт перечислит их). Если вы заинтересованы, пожалуйста, следуйте http://smug.codeplex.com

0 голосов
/ 23 августа 2013

Это может быть немного поздно, но может помочь кому-то, кто сталкивается с этой проблемой и сталкивается с этим вопросом.

Мы нашли способ обойти это ограничение, вернув ваш Интерфейс Array вместо object[,].

Существует неявное преобразование, поэтому код внутри вашей реализации интерфейса должен оставаться неизменным.

...