unit testingw / Moq的Excel Interop + Type.Missing
我刚刚遇到一个例外,在编写unit testing的时候我无法解释自己。
(简化)我想testing的代码是:
public object GetSecondColumn(Microsoft.Office.Interop.Excel.Range theRange) { return theRange.Columns[2, Type.Missing]; }
我试图写这个testing,但我不断收到一个例外:
//Arrange var usedRange = new Mock<Range>(); var result = new Mock<Range>(); usedRange .Setup(m => m[It.IsAny<object>(), It.IsAny<object>()]).Returns( (object r, object c) => { return result.Object; }); //Assert GetSecondColumn(usedRange);
方法的调用抛出:
System.ArgumentException Message=Missing parameter does not have a default value. Parameter name: parameters StackTrace: 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) at Moq.MethodCallReturn`2.Execute(ICallContext call) at Moq.ExecuteCall.HandleIntercept(ICallContext invocation, InterceptorContext ctx, CurrentInterceptContext localctx) at Moq.Interceptor.Intercept(ICallContext invocation) at Moq.Proxy.CastleProxyFactory.Interceptor.Intercept(IInvocation invocation) at Castle.DynamicProxy.AbstractInvocation.Proceed() at Castle.Proxies.ObjectProxy_3.get__Default(Object RowIndex, Object ColumnIndex) at ****
我不能使用It.IsAny()处理Type.Missing / Missing.Value吗?
国际海事组织你错过了Setup
Columns
方法。 这个方法需要被设置,因为它在函数GetSecondColumn
。 没有设置Columns
是null
:
所以像这样设置Columns
。 在这里, Columns
返回所有types为object
参数。 HTH
[TestMethod] public void GetSecondColumn_WhenCalled_ReturnsSomeExpectedResult() { // Arrange const string expected = "Expectd Value To Return"; var rangeMock = new Mock<Range>(); var fakeResultRange = new Mock<Range>(); fakeResultRange.Setup(range => range[It.IsAny<object>(), It.IsAny<object>()]).Returns(expected); rangeMock.Setup(range => range.Columns).Returns(() => fakeResultRange.Object); ClassToUnitTest cut = new ClassToUnitTest(); // Act var actual = cut.GetSecondColumn(rangeMock.Object); // Assert Assert.AreEqual(expected, actual); }
- 在互操作Excel中的单元格上写图像?
- 使用VSTO将excel中的一系列单元复制到powerpoint中
- 我能否从ASP.NET页面下载内存stream中创build的Excel文件?
- Excel INT等效
- 不规则的System.Data.OleDb.OleDbException(0x80004005):无效的参数问题
- 如何更快地读取OpenXML格式
- Excel Interop与,get_Item()和Item 之间的区别
- 如何使用OleDB从97/03 Excel文档中获取A1单元格?
- Excel的C#OpenXML的:我怎么能在Excel中添加新行后获得单元格的位置,(Row row = new Row()); 没有使用Excel国际刑警组织或macros