Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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# “为什么Moq是投掷”;应至少对模拟调用一次;。当它被设置一次时,哪怕它被设置为null?_C#_Unit Testing_Nunit_Moq - Fatal编程技术网

C# “为什么Moq是投掷”;应至少对模拟调用一次;。当它被设置一次时,哪怕它被设置为null?

C# “为什么Moq是投掷”;应至少对模拟调用一次;。当它被设置一次时,哪怕它被设置为null?,c#,unit-testing,nunit,moq,C#,Unit Testing,Nunit,Moq,下面是代码。创建一个类库,将ref添加到NUnit framework 2.5.3.9345和Moq.dll 4.0.0.0,并粘贴以下代码。试着在我的机器上运行它 测试用例 “MoqTest.TryClassTest.isMessageNoll” 失败:Moq.MockException:应为 至少在模拟上调用一次, 但从未执行过:v=>v.Model =It.Is(值(Moq.It+c_udisplayClass21[MoqTest.GenInfo]).match) 在 Moq.Mock.T

下面是代码。创建一个类库,将ref添加到NUnit framework 2.5.3.9345和Moq.dll 4.0.0.0,并粘贴以下代码。试着在我的机器上运行它

测试用例
“MoqTest.TryClassTest.isMessageNoll”
失败:Moq.MockException:应为
至少在模拟上调用一次,
但从未执行过:v=>v.Model
=It.Is(值(Moq.It+c_udisplayClass2
1[MoqTest.GenInfo]).match)

Moq.Mock.ThrowVerifyException(IProxyCall
预期,表达式,时间
次数,Int32呼叫计数)在
Moq.Mock.VerifyCalls(拦截器
targetInterceptor,方法调用
预期,表达式,时间
时间)在
Moq.Mock.VerifySet[T](Mock
1 Mock,
动作
1设置压力,次数
时间,字符串失败消息)在
Moq.Mock
1.VerifySet(操作'1
setterExpression)Class1.cs(22,0):at
MoqTest.TryClassTest.isMessageNonnull()

它很好用


我认为例外是不正确的

您正在使用以下VerifySet断言:

mockView.VerifySet(v => v.Model = It.Is<GenInfo>(x => x != null));
当然,这个断言失败了

在第二个VerifySet断言中

mockView.VerifySet(v => v.Model, Times.AtLeastOnce());
您的意思是“断言模型属性至少设置了一次”。既然您设置了它(尽管使用了null),那么断言当然会通过

我认为莫克在这里的行为没有任何错误

mockView.VerifySet(v => v.Model, Times.AtLeastOnce());    
mockView.VerifySet(v => v.Model = It.Is<GenInfo>(x => x != null));
this.view.Model = null;
mockView.VerifySet(v => v.Model, Times.AtLeastOnce());