簡體   English   中英

無法驗證Moq方法調用

[英]Can't verify Moq method call

在給定參數的情況下驗證TextWriter Write方法調用存在問題。 我有這個驗證碼:

_htmlHelperMock.TextWritterMock.Verify(x => x.Write(It.Is<IHtmlString>(p => p == MvcHtmlString.Create("</div>"))), Times.Once);

拋出此異常:

Expected invocation on the mock once, but was 0 times: x => x.Write(It.Is<IHtmlString>(p => p == MvcHtmlString.Create("</div>")))  
No setups configured.

Performed invocations:  
TextWriter.Write(<div class="control-group">)  
TextWriter.Write(</div>)

有趣的是,在例外情況下,我看到了要檢查的字符串的真實調用。 我應該如何配置驗證方法來檢查參數?

當您使用It.Is<IHtmlString>(p => p == MvcHtmlString.Create("</div>")) (沒有我對MvcHtmlString理解,很顯然這將失敗)。 在測試期間調用的任何內容都將是Create返回的另一個對象。 在此Verify它正在比較==兩個實例。 這些將是對象引用相等。

您可能需要一個Func<IHtmlString,bool>來比較值而不是實例。 您是否可以將p.ToString() (或ToHtmlString() )與字符串"</div>" Create似乎是多余的工作。

It.Is<T>帶有一個函數,該函數說“給定類型為T的已記錄對象,請對該對象進行驗證”。 因此,這擴展為(從概念上):

IHtmlString actual = theRecordedParameter;
IHtmlString expected = MvcHtmlString.Create("</div>");
bool pass = actual == expected;
Assert.IsTrue(pass);

通過使用一些中間操作,您可以對兩個不同的實際對象和預期對象進行操作,並比較一些派生值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM