C# 类型为的最小起订量。缺少参数
我试图模拟Excel的互操作名称。Add() 看起来像这样C# 类型为的最小起订量。缺少参数,c#,excel,moq,excel-interop,C#,Excel,Moq,Excel Interop,我试图模拟Excel的互操作名称。Add() 看起来像这样 Name Add(object Name = Type.Missing, object RefersTo = Type.Missing, object Visible = Type.Missing, object MacroType = Type.Missing, object ShortcutKey = Type.Missing, object Category = Type.Missing, object NameLocal = T
Name Add(object Name = Type.Missing, object RefersTo = Type.Missing, object Visible = Type.Missing, object MacroType = Type.Missing, object ShortcutKey = Type.Missing, object Category = Type.Missing, object NameLocal = Type.Missing, object RefersToLocal = Type.Missing, object CategoryLocal = Type.Missing, object RefersToR1C1 = Type.Missing, object RefersToR1C1Local = Type.Missing);
我正在尝试使用Callback()设置本地集合,以证明正确调用了Add():
names.Setup(n => n.Add(It.IsAny<object>(), It.IsAny<object>(), It.IsAny<object>(), Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)).Callback(
(object name, object r, object a, object b, object c, object d, object e, object f, object g, object h, object i) =>
{
nameList.Add((string)name);
rangeList.Add(((Microsoft.Office.Interop.Excel.Range)r).Formula);
});
这会引发异常
“其他信息:缺少的参数没有默认值。”
我尝试过使用null而不是Type.Missing进行安装,但只有在显式使用
var result = names.Add(name, cell, true, null, null, null, null, null, null, null, null);
但我不想为了单元测试而改变我真正的代码
有什么建议吗?为什么不使用
It呢?任何对于设置TestMember时应该提到的所有参数,我是这样做的,第一个-当实际调用names.Add()时,“缺少的参数没有默认值”存在同样的问题,即使使用了.Any并填充了其余的名称。Add()类型为的呼叫。缺少不起作用。names.Add()中的null将用于null或Setup()调用中的.Any。问题是我真的不想更改names.Add()以使所有这些空值仅用于测试,所以我最终扩展了names接口,并使Add()和模拟该类作为从workbook.names中的names对象返回的内容。让我在不更改代码的情况下进行单元测试,但在moq框架中似乎仍然是一个bug
at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Delegate.DynamicInvokeImpl(Object[] args)
at System.Delegate.DynamicInvoke(Object[] args)
at Moq.Extensions.InvokePreserveStack(Delegate del, Object[] args) in C:\projects\moq4\Source\Extensions.cs:line 108
var result = names.Add(name, cell, true, null, null, null, null, null, null, null, null);