2017-02-15 10 views
0

ILoggerにログインしたときにエラーが発生しました。ILogger.LogMessageのエラーを確認するには?

ILogger.LogMessage(Error, "Steps failed", System.Reflection.TargetParameterCountException: Parameter count mismatch. 
    at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 

私のユニットテストで、同じエラーがスローされたかどうかを確認する必要があります。どうすればこれを実現できますか?ここで私がMockを使ってやろうとしていることがあります。

var expectedException = @""Steps failed", System.Reflection.TargetParameterCountException: Parameter count mismatch. 
     at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture); 

_Mocklogger.Verify(
       x => 
        x.LogMessage(LogSeverity.Error, expectedException, 
         new System.Reflection.TargetParameterCountException(expectedException)), Times.Once); 

ただし、これはエラーで失敗しました:

Moq.MockException : 
Expected invocation on the mock once, but was 0 times: x => x.LogMessage(LogSeverity.Error, "Parameter count mismatch. 

答えて

1

部品番号を参照することによりTargetParameterCountExceptionに一致するようにしようとしているが、検証文のパラメータがNEWでインスタンスであるとして、それは一致しませんように見えます。

これが問題であるかどうかを確認するために、

_Mocklogger.Verify(x =>x.LogMessage(LogSeverity.Error, 
            expectedException, 
       It.IsAny<System.Reflection.TargetParameterCountException>()), 
            Times.Once); 

を試してみてください。 Moqが上記と一致し、例外内のメッセージが正しいことを確認する必要がある場合は、例外の内容をチェックする関数を入れる必要があります。

_Mocklogger.Verify(x =>x.LogMessage(LogSeverity.Error, 
            expectedException, 
    It.Is<System.Reflection.TargetParameterCountException>(CheckException)), 
            Times.Once); 


private static bool CheckException(System.Reflection.TargetParameterCountException ex){ 
    //... 
} 
関連する問題