Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t验证Moq方法调用_C#_Unit Testing_Tdd_Moq - Fatal编程技术网

C# Can';t验证Moq方法调用

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==

使用给定参数验证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==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);