使用 It.IsAny() 的 Moq 单元测试失败

2024-03-08

我正在使用 Moq 为项目编写单元测试,当我尝试验证 DateTime 属性是否已分配值时,其中一个测试失败。这是我的验证(失败):

        _mockTaskContext.Verify(context => context.TaskQueue.AddObject(It.Is<TaskQueueItem>(
            task_queue => task_queue.TaskCode == (int)TaskCode.MyTask
                    && task_queue.ClientID == ExpectedClientID
                    && task_queue.JobNumber == It.IsAny<int>()
                    && task_queue.Requester == String.Empty
                    && task_queue.JobStatus == (int)JobStatus.Submitted
                    && task_queue.TimeQueued == It.IsAny<DateTime>()
                    && 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 or TimeStopped from new DateTime(1900, 1, 1) to It.IsAny<DateTime>(),测试失败。我已经使用实际实现而不是模拟存储库在单元测试之外运行了测试代码,并且TimeQueued正在被正确分配其值。知道为什么吗It.IsAny似乎无法正常工作DateTime属性,还是我错误地设置了我的期望?

更新:我在其他测试中使用 It.IsAny() 没有任何问题,但这个测试仍然失败。我认为这可能是因为这是在 It.Is lambda 表达式内部,但我不知道如何解决这个问题。


我确信It.IsAny<>()语法必须在模拟对象的范围内使用。在这种情况下,当您使用Setup和直接模拟参数。这是因为模拟对象处于记录模式,捕获您传递给参数的值,因此

mock.Setup(x => x.Foo(It.IsAny<Bar>()));

将在执行安装行时处理参数。

但是在您的示例中您尝试使用It.IsAny<>()从委托内部验证匹配中传递的参数。当发生这种情况时,模拟不会记录,而是正在被用作被测试对象的结果(这是很晚的事情)。

So someValue == It.IsAny<DateTime>()无法评估为 true 作为返回IsAny方法必须返回一个匹配的值才能为 true。我预计It.IsAny<int>()也不起作用。

我的建议是,您必须匹配精确值,或者在本例中匹配一系列日期

&& IsInRange(DateTime.MinValue, DateTime.MaxValue, task_queue.TimeQueued)

where IsInRange您可以使用另一种方法来检查值是否在 2 分钟和最大范围之间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 It.IsAny() 的 Moq 单元测试失败 的相关文章

  • C#中如何检测字符串是否为货币

    通常当我需要转换时currency string 如 1200 55 z 或 1 249 到十进制值我这样做 if currencyString Contains z decimal value Decimal Parse dataToCh
  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • 有没有比这更快的方法来查找目录和所有子目录中的所有文件?

    我正在编写一个程序 需要在目录及其所有子目录中搜索具有特定扩展名的文件 这将在本地驱动器和网络驱动器上使用 因此性能是一个问题 这是我现在使用的递归方法 private void GetFileList string fileSearchP
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI
  • C++ 在 Vector 中使用不可分配的对象

    我想将对象列表存储在std vector 但对象包含引用且无法分配给 但是 我可以复制构造该对象 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新设置指针 但这样做的语法会显着降低可读性 特别是在使用迭代器时 我更喜欢另一种选择
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 为什么 C 函数不能返回数组类型?

    我是 C 语言新手 想知道 为什么 C 函数不能返回数组类型 我知道数组名是数组第一个值的地址 而数组是 C 中的二等公民 您自己已经回答了这个问题 数组是二等公民 C 按值返回 数组不能按值传递 因此不能返回它们 至于为什么数组不能按值传
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • 改进C++逐行读取文件的能力?

    我正在解析大约 500GB 的日志文件 我的 C 版本需要 3 5 分钟 我的 Go 版本需要 1 2 分钟 我正在使用 C 的流来流式传输文件的每一行以进行解析 include
  • 多个同名内存数据库

    关系到这个答案 https stackoverflow com a 48446491 596758 我试图通过设置让多个上下文工作UseInMemoryDatabase以同名 下面的测试失败 第二个上下文为空 我还需要做什么才能在内存数据库
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y

随机推荐

  • 标头防护难题 - 已在 .obj 问题中定义

    我有一个类 A 它必须包含两个文件 类 X 和类 Y 不幸的是 类 Y 还需要在其头文件中包含类 X 因为构造函数将指向类 X 类型的指针作为参数 潜在的问题是会出现链接器错误吗 因为类 A 现在有两份类 X 的副本 一份是它需要使用的 一
  • ORU-10027:缓冲区溢出,限制为 100000 字节

    我在 PL SQL 中生成 100k 记录时遇到以下错误 我创建了一个包并从匿名块调用该包 Error report ORA 20000 ORU 10027 buffer overflow limit of 100000 bytes ORA
  • 如何在 Swift 中获取 PDF 中的所有文本?

    我有一个 PDF 文档 想提取其所有文本 我尝试了以下方法 import Quartz let url NSBundle mainBundle URLForResource test withExtension pdf let pdf PD
  • 当表单数据的各个部分位于不同的页面上时,如何存储它们?

    每当我要为客户准备一份长表格时 我总是想将其分成单独的页面 这样访问者就不必填写全部内容 而是分步骤填写 就像是 Step 1 gt Step 2 gt Step 3 gt Thank You 我从未这样做过 原因只有一个 我不知道如何有效
  • 为什么我想要 `setRetainInstance(false)`? - 或 - 处理设备旋转的正确方法

    如果我对此有任何错误 请纠正我 这是一种澄清问题 因为我还没有在任何地方看到它明确写过 在Android 4中 您可以调用setRetainInstance true on a Fragment这样在配置更改时 这基本上意味着设备旋转 Fr
  • 在Java中通过对象引用访问静态变量

    为什么我们可以通过Java中的对象引用来访问静态变量 如下面的代码 public class Static private static String x Static variable public String getX return
  • 通过 Cygwin 在 Windows 上出现错误 Hadoop:无法找到 null\bin\winutils.exe

    当我设置HADOOP HOME cygdrive c ecosystem hadoop 2 5 1然后尝试运行bin hadoop 文件系统 or bin hadoop hadoop streaming jar从 Cygwin 我收到以下错
  • exec-maven-plugin 错误,即使在工作示例中也是如此

    EDIT5 更新 我正在使用 Maven 3 3 3 我只是创建新项目并添加编译和执行插件 作为网络上的示例 我尝试执行 但出现错误 ERROR Failed to execute goal org codehaus mojo exec m
  • 在 Visual C++ 中分配对齐数据 (memalign)

    我有一个用 C 编写的小型原型程序 在 Linux 下运行 使用memalign函数分配与边界 如页面 对齐的区域 Visual C 中有等效的函数吗 您正在寻找 aligned malloc http msdn microsoft com
  • 从应用程序内运行仪器测试并等待结果

    我正在开发一个 QA 自动化解决方案 可以在 Android 上记录 回放 QA 测试 一个关键的业务要求是在回放录制的测试时不依赖于连接的 PC 为此 我尝试在没有连接电脑的情况下运行仪器测试 具体来说 Appium UiAutomato
  • AngularJS 中的绑定和消化是如何工作的?

    AngularJS 与其他 JavaScript MVC 框架的区别之一是它能够使用绑定将 JavaScript 中的绑定值回显到 HTML 中 当您为 scope 变量分配任何值时 Angular 会 自动 执行此操作 但这有多自动呢 有
  • CSS - 当链接悬停时更改另一个元素的样式?

    如何在链接悬停时更改另一个元素的样式 无需 jQuery JavaScript ul gt li gt a hover main opacity 0 1 main p font size 200px
  • 还有其他半/便携式方法来动态分配内存吗?

    this char buf NULL scanf ms buf 将获得动态分配的字符缓冲区 我知道这仅限于使用 Gcc 特别是 glibc 2 7 版本 编译的代码 我也知道 正确 和便携的方法是只使用malloc 和朋友 获取记忆 I m
  • 获取 jsoup 中元素的字符偏移量

    我需要将 jsoup 元素映射回源 HTML 中的特定字符偏移量 换句话说 如果我的 HTML 看起来像这样 Hello br World 我需要知道 Hello 从偏移量 0 开始 长度为 6 个字符 br 从偏移量 6 开始 长度为 5
  • Windows Phone 8(WP8) C# 代码不安全?

    编辑 您可以使用不安全的代码 您只需手动编辑 proj 文件 当我可以在手机上使用本机 C 代码时 为什么或为什么 WP8 上的 C 不支持不安全代码 我没想到这一点 我的意思是 拜托 我对 Microsoft 试图强行使用 C 的做法感到
  • id 表达式到底是什么?

    我无法清楚地理解什么是id expression是 我将首先遵循我在 C 标准的最新工作草案中发现的内容 冒险定义一个identifier 标识符是任意长的字母和数字序列 所以看起来任意长的字母和数字序列都可以是id expression
  • React Native 中的热重载和实时重载有什么区别?

    我在这里有点困惑 当我调试 React Native 应用程序时 我通常会启用两者热重载 and 实时重新加载 我想知道它们之间有什么区别 实时重新加载当文件更改时重新加载或刷新整个应用程序 例如 如果您有四个链接深入导航并保存了更改 则实
  • 如何从kinect fracetrack获取网格?

    如何获取 kinect 面部追踪网格 这是网格 https i stack imgur com aPtJt jpg https i stack imgur com aPtJt jpg 我尝试了多种方法 但无法使其发挥作用 e g http
  • 等待集合获取主干中的所有内容

    我有两套收藏 一个用于类别 另一个用于项目 我需要等待类别完成获取所有内容 以便为要获取的项目设置类别 另外 每次单击类别时 我都必须重新获取新的项目集合 因为每次单击类别时都会进行分页 它不会刷新或重新获取集合 因此分页代码会弄乱错误的集
  • 使用 It.IsAny() 的 Moq 单元测试失败

    我正在使用 Moq 为项目编写单元测试 当我尝试验证 DateTime 属性是否已分配值时 其中一个测试失败 这是我的验证 失败 mockTaskContext Verify context gt context TaskQueue Add