2017-09-04 11 views
1

例外が発生しました単体テストの作成中に自分自身について説明できません。私がテストしたいExcelのInterq + Type.Missingを使用した単体テスト

(簡体字)のコードは次のとおりです。

public object GetSecondColumn(Microsoft.Office.Interop.Excel.Range theRange) 
{ 
    return theRange.Columns[2, Type.Missing]; 
} 

私はこのテストを書き込もうとしましたが、私は例外を得続ける:

//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を処理できませんか?

答えて

1

IMO ColumnsメソッドのSetupがありません。このメソッドは、関数GetSecondColumnで呼び出されるため、セットアップする必要があります。セットアップColumnsがなけれnullです:

enter image description here

だから、セットアップColumns例えばこのような。ここでColumnsは、タイプobjectのすべての引数に対してexpectedを返します。 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); 
} 
関連する問題