C# “为什么Moq是投掷”;应至少对模拟调用一次;。当它被设置一次时,哪怕它被设置为null?
下面是代码。创建一个类库,将ref添加到NUnit framework 2.5.3.9345和Moq.dll 4.0.0.0,并粘贴以下代码。试着在我的机器上运行它 测试用例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
“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(操作'1setterExpression)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());