2017-02-15 18 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參考,但作爲參數的驗證語句是一個newed例如,它永遠不會匹配。

嘗試,

_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){ 
    //... 
}