C# Can';t验证Moq方法调用
使用给定参数验证TextWriter写入方法调用时出现问题。我有这个验证码:C# Can';t验证Moq方法调用,c#,unit-testing,tdd,moq,C#,Unit Testing,Tdd,Moq,使用给定参数验证TextWriter写入方法调用时出现问题。我有这个验证码: _htmlHelperMock.TextWritterMock.Verify(x => x.Write(It.Is<IHtmlString>(p => p == MvcHtmlString.Create("</div>"))), Times.Once); \u htmlHelperMock.TextWritterMock.Verify(x=>x.Write(It.Is(p=>p==
_htmlHelperMock.TextWritterMock.Verify(x => x.Write(It.Is<IHtmlString>(p => p == MvcHtmlString.Create("</div>"))), Times.Once);
\u htmlHelperMock.TextWritterMock.Verify(x=>x.Write(It.Is(p=>p==MvcHtmlString.Create(“”)),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>)
预期对mock调用一次,但为0次:x=>x.Write(It.Is(p=>p==MvcHtmlString.Create(“”))
未配置任何设置。
执行的调用:
TextWriter.Write()
TextWriter.Write()
有趣的是,在例外情况下,我看到了真正的调用,其中包含我想要检查的字符串。
我应该如何配置验证方法来检查参数?当您使用
It.Is(p=>p==MvcHtmlString.Create(“”)
进行验证时(如果我不了解MvcHtmlString
,很明显这将失败)。无论您在测试期间调用什么,都将是Create
返回的不同对象。在此验证中,它将两个实例与=
进行比较。这些将是对象引用相等
您可能需要一个比较值而不是实例的Func
。您是否能够将p.ToString()
(或ToHtmlString()
)与字符串“
”进行比较?Create
看起来像是额外的工作
It.Is
接受一个函数,该函数表示“给定类型为T
的记录对象,请验证该对象的某些信息”。因此,这扩展到(概念上):
IHtmlString actual=记录的参数;
应为IHtmlString=MvcHtmlString.Create(“”);
布尔过程=实际==预期;
Assert.IsTrue(pass);
通过使用一些中间操作,您可以对实际和预期的两个不同对象进行操作,并比较一些派生值。@marc\s,对不起,您的编辑删除了一些必要的信息,我必须还原您的编辑谢谢。你的回答帮助我解决了这个问题。将p.ToString()与给定字符串进行比较就足够了,这就是工作_验证(x=>x.Write(It.Is(p=>p.ToString()==”)),次.1次);msi,很高兴你能成功。
IHtmlString actual = theRecordedParameter;
IHtmlString expected = MvcHtmlString.Create("</div>");
bool pass = actual == expected;
Assert.IsTrue(pass);