[英]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.