c# - 与Moq一起使用多个索引器

原文 标签 c# unit-testing moq

我一直在尝试使用Moq来伪造带有多个索引器的对象集(并获取)。我以前已经将Moq与单个索引器一起使用了一段时间,但似乎无法使用多个索引器。根据我的研究,我知道Moq在使用It.IsAny <>作为索引器参数时可能会遇到问题,但是我还尝试了以下具有特定参数的代码(例如嘲笑[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:值不能为null。参数名称:
  论点。
  
  System.Linq.Expressions.Expression.ValidateArgumentTypes(MethodInfo
  方法,ReadOnlyCollection 1& arguments) System.Linq.Expressions.Expression.ValidateCallArgs(Expression instance, MethodInfo method, ReadOnlyCollection 1&参数)
  System.Linq.Expressions.Expression.Call(Expression实例,
  MethodInfo方法,IEnumerable 1 arguments) System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, Expression[] arguments) TCall](Mock 1模拟,
  动作1 setterExpression, Func 5 callFactory)b__25()
  Moq.PexProtector.Invoke [T](Func 1 function) Moq.Mock.SetupSet[T](Mock 1模拟,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_Client12.BonusHandler \ Client12 \ Gaming \ BonusHandler \ UnitTest \ BonusHandlerTest.cs:
  100行


根据我的尝试,Moq似乎无法使用多个参数进行索引。有人有想法么?互连网并没有太大帮助。

最佳答案

对于它的价值,我设置了这种情况,没有例外:

        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 <>有关,而且与设置值也不一样。我从未在测试中尝试过执行此操作,但这对我来说似乎是该工具的当前限制。

相关文章:

c# - C#中IsNullOrEmpty和IsNullOrWhiteSpace之间的区别

iphone - 无法在基本单元测试设置中测试我的类(class)

c# - MOQ - LINQ谓词设置方法

c# - System.ArgumentException: header 具有空值

c# - 创建newRows并将其从较小的CSV文件添加到数据表时出现OOM异常

c# - 用于在C#.NET中以O(1)时间获取项目的“正确”集合?

python - 用Python编写单元测试:如何开始?

angularjs - 如何模拟提供者

c# - 在进行单元测试时如何将多个依赖对象传递给 Controller ​​构造函数?

c# - 预期对模拟进行一次调用,但是与Moq一起为0次