2016-09-15 154 views
2

我有一個Moq模擬的類,我需要驗證某個方法是否被調用。根據變量的類型,我需要檢查該方法是被調用過的還是從不被調用。C#三元運算符不工作

所以,這個工程:

if (exception is ValidationException) 
    mockRequestHandler.Verify(x => x.HandleException(exception), 
    Times.Once); 
else 
    mockRequestHandler.Verify(x => x.HandleException(exception), 
    Times.Never); 

我想如下使用三元運算符,但它似乎並沒有工作:

mockRequestHandler.Verify(x => x.HandleException(exception), 
    (exception is ValidationException) ? Times.Once: Times.Never); 

我得到編譯期以下時間錯誤:

Type of conditional expression cannot be determined because there is no implicit conversion between 'method group' and 'method group'.

有沒有簡單的東西我忽略或可以三元操作符不能用於這種方式?

+1

爲什麼首先不要進行異常檢查?例如。 '(異常是ValidationException)? mockRequestHandler.Verify(x => x.HandleException(exception),Times.Once):mockRequestHandler.Verify(x => x.HandleException(exception),Times.Never);'。它似乎幾乎只要你的原始,但參考這個鏈接:[使用條件(?:)運算符在C#(3.0)中的方法選擇?](http://stackoverflow.com/questions/5186394/using-條件操作符爲方法選擇在C - 尖-3-0) –

+2

您能請指定'驗證','Times.Once'和'Times.Never'類型簽名? –

+0

您應該能夠將其中一個操作數轉換爲Func來解決它 –

回答

6

正如我在this source file中看到的,Times.OnceTimes.Never實際上是靜態方法,但不是屬性。

爲了驗證該方法被調用一次或不會被調用,你需要使用這種方式:

mockRequestHandler.Verify(x => x.HandleException(exception), Times.Once()); 
mockRequestHandler.Verify(x => x.HandleException(exception), Times.Never()); 

所以,使用三元操作將是:

mockRequestHandler.Verify(x => x.HandleException(exception), 
    (exception is ValidationException) ? Times.Once() : Times.Never()); 
+0

這可能是moq case的錯誤建議。驗證第二個參數的類型確認 –

+1

[在第28行驗證](https://github.com/moq/moq4/blob/756bf4e3e7b213c6d819ae7acd5e04280a07a040/UnitTests/ExtensionsFixture.cs) – txtechhelp

+1

@AlexeiLevenkov謝謝你的建議。我從來沒有使用Moq,但我已經看到GitHub上的這種用法,並且[這裏](http://stackoverflow.com/questions/4206193/how-do-i-verify-a-method-was-called-exactly-曾經有-MOQ)。如果OP嘗試了這一點,它不會工作,我會刪除我的答案:) –