Использование нескольких индексаторов с Moq - PullRequest
3 голосов
/ 24 октября 2011

Я пытался использовать Moq, чтобы подделать набор объектов (и получить) с несколькими индексаторами.Ранее я уже довольно давно использовал Moq с отдельными индексаторами, но, похоже, он не работает с несколькими индексаторами.Из моего исследования мне известно, что в Moq могут возникнуть проблемы с использованием It.IsAny <> для параметров индексатора, но я также пробовал следующий код с конкретными параметрами (например, mock [1, "BlockItem"]). Вот мой код:

m_storageAccessor.SetupSet(
mock => mock[It.IsAny<int>(), It.IsAny<string>()] = It.IsAny<object>()).Callback(
                (int i, string s, object o) =>
                       {
                           m_storageAccessor.SetupGet(
                               mock => mock[i, s]).Returns(
                                   () => { return o; });
                       });

Это создает следующее исключение, опять же, независимо от того, какие параметры я даю функции индексатора в SetupSet ().

Метод инициализации UnitTest.BonusHandlerTest.MyTestInitialize вызвал исключение.System.ArgumentNullException: System.ArgumentNullException: значение не может быть нулевым.Имя параметра: arguments.

System.Linq.Expressions.Expression.ValidateArgumentTypes (метод MethodInfo, ReadOnlyCollection 1& arguments) System.Linq.Expressions.Expression.ValidateCallArgs(Expression instance, MethodInfo method, ReadOnlyCollection 1 & arguments) System.Linq.Expressions.Expression.Call (экземпляр выражения, метод MethodInfo, метод IEnumerable 1 arguments) System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, Expression[] arguments) TCall](Mock 1 mock, Action 1 setterExpression, Func 5 callFactory) b__25 () Moq.PexProtector.Invoke [T] (Func 1 function) Moq.Mock.SetupSet[T](Mock 1 mock, условие Action 1 setterExpression, Func 1) SetupSet (Action`1 setterExpression) UnitTest.BonusHandlerTest.SetupPersistence () в C: \ Perforce \ dev \ KHIRST_Client12.BonusHandler \ Client12 \ Gaming \ BonusHandler \ UnitTest \ BonusHandlerTest.cs: строка 868 UnitTest.BonusHandlerTest.MyTestInitialize () в C: \ Perforce \ dev \ KHIRST_Candler12:BonusHandler \ UnitTest \ BonusHandlerTest.cs: строка 100

На основании того, что я пробовал, кажется, что Moq не может выполнять индексирование с несколькими параметрами.У кого-нибудь есть идеи?Межплетение не очень помогло.

1 Ответ

2 голосов
/ 24 октября 2011

Для чего бы то ни было, я настроил этот сценарий, и исключений не было:

        var myStub = new Mock<Foo>();
        myStub.SetupSet(foo => foo[12, "asdf"] = null).Callback((int i, string s, object o) => myStub.SetupGet(foo => foo[i, s]).Returns(o));

Похоже, что ему не просто нравится It.IsAny <> для параметров индексатора,но и до установленного значения.Я никогда не пытался сделать это в своем тестировании, но это кажется мне текущим ограничением инструмента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...