使用It.IsAny ()的Moqunit testing失败
我正在使用Moq为项目编写unit testing,当我尝试validationDateTime属性是否被赋值时,其中一个测试失败。 这是我的validation(失败):
_mockTaskContext.Verify(context => context.TaskQueue.AddObject(It.Is( task_queue => task_queue.TaskCode == (int)TaskCode.MyTask && task_queue.ClientID == ExpectedClientID && task_queue.JobNumber == It.IsAny() && task_queue.Requester == String.Empty && task_queue.JobStatus == (int)JobStatus.Submitted && task_queue.TimeQueued == It.IsAny() && task_queue.TimeStarted == new DateTime(1900, 1, 1) && task_queue.TimeStopped == new DateTime(1900, 1, 1) && task_queue.TaskParameters == expectedTaskParam )), Times.Once());
如果我在task_queue.TimeQueued
上注释掉期望值,则测试通过,而不对我的测试进行任何其他更改。 此外,如果我将TimeStarted
或TimeStopped
的要求new DateTime(1900, 1, 1)
It.IsAny()
new DateTime(1900, 1, 1)
更改为It.IsAny()
,则测试失败。 我使用实际的实现而不是TimeQueued
存储库运行unit testing之外的测试代码,并正确地为TimeQueued
分配其值。 知道为什么It.IsAny
似乎没有正确使用DateTime
属性,或者我是否错误地设置了我的期望?
更新:我在其他测试中使用It.IsAny()没有任何问题,但此测试仍然失败。 我想这可能是因为这是在It.Is lambda表达式中,但我不知道如何解决这个问题。
我确信必须在mock对象的范围内使用It.IsAny<>()
语法。 在这种情况下,直接使用Setup
和模拟参数。 这是因为模拟对象处于记录模式,捕获您传递给参数的值
mock.Setup(x => x.Foo(It.IsAny()));
将在执行“设置”行时处理参数。
但是在您的示例中,您尝试在委托中使用It.IsAny<>()
来validation匹配中传递的参数。 当发生这种情况时,模拟器不会记录,而是在被测对象(后来更晚)的结果中使用。
因此, someValue == It.IsAny
无法求值为true,因为IsAny
方法的返回必须返回匹配值才能为true。 我希望It.IsAny
也不起作用。
我的建议是你必须匹配精确的值,或者在这种情况下匹配一系列日期
&& IsInRange(DateTime.MinValue, DateTime.MaxValue, task_queue.TimeQueued)
其中IsInRange
只是另一种检查值的方法是在2分钟和最大边界之间。
上述就是C#学习教程:使用It.IsAny ()的Moqunit testing失败分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1022480.html