MOQ 错误 预期对模拟调用一次,但实际调用次数为 0 次

2024-01-01

我是最小起订量新手,我已阅读快速入门here https://github.com/Moq/moq4/wiki/Quickstart。我使用的是最小起订量 v4.2.1402.2112。我正在尝试创建一个单元测试来更新人员对象。这UpdatePerson方法返回更新后的 person 对象。有人可以告诉我如何纠正这个问题吗?

我收到此错误:

Moq.MockException was unhandled by user code 
HResult=-2146233088
Message=Error updating Person object
Expected invocation on the mock once, but was 0 times: svc => svc.UpdatePerson(.expected)
Configured setups: svc => svc.UpdatePerson(It.IsAny<Person>()), Times.Never
No invocations performed.
  Source=Moq
  IsVerificationError=true

这是我的代码:

    [TestMethod]
    public void UpdatePersonTest()
    {
        var expected = new Person()
        {
            PersonId = new Guid("some guid value"),
            FirstName = "dev",
            LastName = "test update",
            UserName = "[email protected] /cdn-cgi/l/email-protection",
            Password = "password",
            Salt = "6519",
            Status = (int)StatusTypes.Active
        };

        PersonMock.Setup(svc => svc.UpdatePerson(It.IsAny<Person>())) 
            .Returns(expected) 
            .Verifiable();

        var actual = PersonProxy.UpdatePerson(expected);

        PersonMock.Verify(svc => svc.UpdatePerson(It.IsAny<Person>()), Times.Once(), "Error updating Person object");

        Assert.AreEqual(expected, actual, "Not the same.");
    }

有了这条线

PersonMock.Verify(svc => svc.UpdatePerson(It.IsAny<Person>()), 
                  Times.Once(), // here
                  "Error updating Person object");

您正在对模拟设定期望UpdatePerson方法应该被调用一次。它失败了,因为您的 SUT(您正在测试的类)根本不调用此方法:

没有执行任何调用

还要验证您是否将模拟对象传递给PersonProxy。它应该是这样的:

PersonProxy = new PersonProxy(PersonMock.Object);

及实施

public class PersonProxy
{
    private IPersonService service; // assume you are mocking this interface

    public PersonProxy(IPersonService service) // constructor injection
    {
        this.service = service;
    }

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

MOQ 错误 预期对模拟调用一次,但实际调用次数为 0 次 的相关文章

随机推荐

  • Uploadify:使用 scriptData 将表单的 ID 作为参数传递

    我需要能够使用 Uploadify 在一页上有多个上传输入 可能有数百个 上传 PHP 文件将根据用于提交文件的输入按钮的 ID 重命名上传的文件 因此它将需要该 ID 由于我将在一个页面上有数百个上传按钮 因此我想创建一个通用实例 因此我
  • 带有主查询数据变量的 MySQL 子查询

    好的 这里需要一位 MySQL 专家 我正在尝试编写一个查询 当有人对您之前评论过的项目发表评论时 该查询将充当通知系统 drinkComment 表非常简单 commentID userID drinkID datetime commen
  • Flex/bison,错误:未声明

    你好 我有一个问题 下面的程序返回一个错误 error Undeclared first use in function 为什么会出现这个错误所有令牌都被声明了 但是这个错误来了 任何人都可以帮助我 这里是 lex 和 yac 文件 谢谢
  • TortoiseHG 和 TortoiseSVN 一起玩得好吗?

    我先安装了TSVN 并使用了很长时间 然后我安装 T HG 当我右键单击时 我没有看到任何 TortoiseHG 有人有同样的问题吗 所有 T SVN 覆盖仍然存在 从版本 0 8 2009 07 01 发布 开始 TortoiseHg 支
  • 在.NET 中连接来自不同源数据库的两个数据表?

    如何在 NET 中连接来自不同源数据库的两个数据表 理想情况下 我可以手动创建两个查询并简单地连接到单个字段 在这种情况下 链接服务器和计划导入不是一个选项 我已经研究了数据关系对象 但是 如果我错了 请纠正我 这只适用于父子关系 我也遇到
  • WinDbg 在 MS 符号服务器上找不到 ntdll 的符号

    我正在尝试调试可执行文件 notepad exe 来自 Windows 10 发行版 并且需要来自 Microsoft 符号服务器的符号 ntdll pdb 但调试器返回错误 指出找不到指定的文件 0 000 gt reload Reloa
  • 我可以在 Schema.org 的一个项目范围中使用多个项目类型吗? [复制]

    这个问题在这里已经有答案了 我想知道是否可以在一个项目范围内使用多个项目类型 例如我现在有这个 div class wrapper p p p p div 当我在 Google 的 Web 开发人员工具中进行结构化数据测试时 它仅选取
  • Trirand jqGrid 未显示;类型错误:$(...).jqGrid 不是函数

    网格不显示 Firefox 控制台显示 类型错误 jqGrid 不是函数 ASP NET MVC 5 2 2 剃刀 jQuery 2 1 1 特兰德 jqGrid 4 6 0 我检查过其他类似的问题 每次问题看起来都不一样 要么是语法问题
  • 通过Spark SQL进行批量数据迁移

    我目前正在尝试通过 Spark SQL 将非常大的 MySQL 表的内容批量迁移到 parquet 文件中 但这样做时 即使将驱动程序的内存限制设置得更高 我在本地模式下使用 Spark 我也会很快耗尽内存 示例代码 Dataset
  • 如何在 Dart 中使用正则表达式?

    在 Flutter 应用程序中 我需要检查字符串是否与特定的正则表达式匹配 但是 我从应用程序的 JavaScript 版本复制的正则表达式always在 Flutter 应用程序中返回 false 我验证了regexr https reg
  • 尾随返回类型语法因 noexcept 说明符而失败?

    此代码按预期工作 void f noexcept 但在 GCC 4 7 2 中 以下操作会失败并出现错误 auto f gt void noexcept error expected initializer before noexcept
  • 在 C++ 中使用 std::bind 和 std::function 时出错[重复]

    这个问题在这里已经有答案了 我尝试在多元函数上尝试牛顿法的片段并使用std bind and std function 但我陷入了一个错误 错误 从 std Bind helper int gt type aka 进行转换 std Bind
  • NetworkOnMainThreadException android 活动[重复]

    这个问题在这里已经有答案了 我正在使用此代码来检索 android 活动中的网站数据 它抛出 android os networkonmainthreadexception try URL url new URL https enigmat
  • jQuery 中的内容文档

    我有以下 js 脚本来访问对象内的元素 SVG jQuery document ready function window load function var a document getElementById alphasvg var s
  • “未设置对象引用”错误

    我收到错误 对象引用未设置到对象的实例 关于下一个方法 private void alSave Click object sender EventArgs e alRecord WriteXml alRecord xml XmlWriteM
  • 当值更改时,获取 QTableWidget 中的 QComboBox 的先前值

    说我有一个QTableWidget每行都有一个QComboBox and a QSpinBox 考虑到我存储它们的值是QMap
  • 从彭博终端抓取新闻源

    我可以访问并开始学习如何使用彭博终端 我当前的项目要求我抓取彭博终端上与给定搜索条件相关的所有新闻标题和内容 例如 NI微软 我已经查看过 Bloomberg API 但它似乎只提供对股票 债券报价等市场数据的访问 而不是新闻文章 我现在很
  • Powershell:命令行参数中的冒号

    需要冒号的 Powershell commandlet 开关参数是怎么回事 考虑 Exchange 2010 管理 shell cmdlet移动ActiveMailbox数据库 http technet microsoft com en u
  • Windows 上的 GitLab 运行程序并处理 &%ERRORLEVEL%

    在我的 gitlab ci yml 中 我尝试使用 findstr 命令 findstr c SOLUTION DIR gitlab dif gt founded ref 如果 gitlab dif 中没有匹配 SOLUTION DIR 此
  • MOQ 错误 预期对模拟调用一次,但实际调用次数为 0 次

    我是最小起订量新手 我已阅读快速入门here https github com Moq moq4 wiki Quickstart 我使用的是最小起订量 v4 2 1402 2112 我正在尝试创建一个单元测试来更新人员对象 这UpdateP