起订量索引属性并在返回/回调中使用索引值

2023-11-24

我想要起订量一个具有索引的属性,并且我希望能够在回调中使用索引值,就像您可以在回调中使用起订量方法的方法参数一样。可能最容易用一个例子来演示:

public interface IToMoq
{
    int Add(int x, int y);
    int this[int x] { get; set; }
}

    Action<int, int> DoSet = (int x, int y) =>
    {
        Console.WriteLine("setting this[{0}] = {1}", x, y);
        throw new Exception("Do I ever get called?"); 
    };
    var mock = new Mock<IToMoq>(MockBehavior.Strict);

    //This works perfectly
    mock.Setup(m => m.Add(It.IsAny<int>(), It.IsAny<int>()))
        .Returns<int, int>((a, b) => a + b);

    //This compiles, but my callback never seems to be called
    mock.SetupSet(m => m[It.IsAny<int>()] = It.IsAny<int>())
        .Callback(DoSet);

    var obj = mock.Object;
    Console.WriteLine("Add(3,4) => {0}", obj.Add(3, 4));  //Works perfectly
    obj[1] = 2;   //Does not throw, why? 

编辑:为了澄清,我想要回调/返回方法get to be Func<int,int>,以及回调/返回方法set to be Action<int,int>。尝试一下迈克的建议,你可以这样做set,但有一个主要限制:

mock.SetupSet(m => m[23] = It.IsAny<int>())
            .Callback(DoSet).Verifiable();

回调DoSet然后确实用值调用(23,<any>)。不幸的是,使用It.IsAny<int>()代替23似乎表现得像0, 而不是<any>.

另外,我找不到调用方式SetupGet with Returns where Returns需要一个Func<int,int>甚至可以编译。

可以使用起订量吗?

动机:我只是在玩 Moq,尝试使用它来提供流畅的 API 来执行拦截。也就是说,给定一个接口I和一个实例X of I,自动创建一个Mock<I>代理行为默认为X.

直接使用 Castle DP 可能更有意义,但我喜欢 Moq 表达式树语法。


方法SetupSet采用普通委托,而不是类型的表达式树Expression<...>与许多其他起订量方法一样。

因此,Moq 无法看到您使用过It.IsAny。反而,It.IsAny is called(不是我们想要的)并且 Moq 只看到它的返回值,而恰好是default(int), or 0.

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

起订量索引属性并在返回/回调中使用索引值 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 删除 Firestore 集合中的所有文档

    我正在寻找一种方法来清除整个集合 我看到有一个批量更新选项 但这需要我知道集合中的所有文档 ID 我正在寻找一种方法来简单地删除集合中的每个文档 Edit 下面的答案是正确的 我使用了以下内容 func delete collection
  • mongodb打开连接问题

    我的 mongo 控制台中有以下日志 Tue Jul 23 17 20 01 301 initandlisten waiting for connections on port 27017 Tue Jul 23 17 20 01 401 w
  • 如何删除 VB.NET 中的事件处理程序[重复]

    这个问题在这里已经有答案了 可能的重复 VB NET RemoveHandler 和匿名方法 如果我添加这样的事件处理程序 AddHandler s Click AddressOf Panel1 Click 我怎样才能删除事件处理程序 Pr
  • Apache 2.4.37 与 openssl 1.1.1:无法执行握手后身份验证

    我将 apache 更新到最新版本 2 4 37 将 openssl 更新到 1 1 1 现在 当客户端进行身份验证时 我仅在 Firefox 63 中收到此错误 但在 Chrome 中则不会 ssl error AH verify cli
  • 使用子模块将 Git 推送到 azure 网站

    到目前为止 我已经通过 Git 将站点发布到 Windows Azure 网站 没有出现任何问题 但今天我们向项目添加了一个子模块 而 Azure 似乎不喜欢使用子模块 构建失败 因为我的应用程序依赖于子模块 而 Azure 看到的是空文件
  • 如何使用 get_posts 获取大于 X (ID) 的帖子

    args array numberposts gt 10 tag gt my tag ID gt 555 posts get posts args 我只想从特定标签中获取 10 条记录 并且 ID 小于数字 有没有办法用 get posts
  • 如何 $watch 指令中的多个内插属性?

    我不明白如何在链接函数中同时监视多个属性 因此我创建了一个包含所有参数的对象并监视它 但我注意到链接函数中的属性是一个字符串而不是一个对象 所以我使用 angular fromJson val 我发现的所有示例都只使用一个参数 您能解释一下
  • Symfony2 没有要处理的元数据类

    创建实体后 php app console doctrine generate entity 并在使用时 php app console doctrine schema update force 我遇到过 没有要处理的元数据类 Entity
  • 相对于 HTML 中的绝对路径

    我需要通过 URL 创建新闻通讯 为此 我 创建一个WebClient 使用WebClient的方法DownloadData获取字节数组中的页面源 从 source html 字节数组中获取字符串并将其设置为新闻通讯内容 但是 我在路径方面
  • PostSharp后pdb文件丢失

    我正在使用 PostSharp 版本 2 1 6 4 也尝试了最新版本 2 1 7 35 有时 pdb 文件丢失 并且其中有一个 pssym 文件
  • 拥有 SQLite 和多个表的自己的 ContentProvider

    我在读本教程关于实现我自己的 ContentProvide 以使用 SQLite 在 ContentProvider query 中 有一些事情让我困惑 它似乎非常硬编码为一张表 教程中的待办事项表 但也许我只是不明白 现在 如果我想查询另
  • Python-删除旧文件

    我对 python 有点陌生 一直在尝试自己解决这个问题 但到目前为止只得到了一些零碎的东西 基本上 我正在寻找一个脚本 它将递归搜索目录及其子目录 并删除至少 24 小时前的文件 但不会更改目录 非常感谢任何建议或示例 这使用了os wa
  • jQuery 真正支持哪些 CSS3 选择器,例如:第n个最后一个孩子()?

    根据http api jquery com category selectors 我们可以在 jQuery 中使用大量的 CSS 选择器 但是例如 nth last child 那里没有提到 然而 当我测试以下内容时 使用来自 Google
  • 生成固定长度整数分区的所有唯一排列的算法?

    我正在寻找一种生成整数固定长度分区的所有排列的算法 顺序并不重要 例如 对于 n 4 且长度 L 3 0 2 2 2 0 2 2 2 0 2 1 1 1 2 1 1 1 2 0 1 3 0 3 1 3 0 1 3 1 0 1 3 0 1 0
  • 单个 Git 存储库中的公共和私有代码

    我参与的一个研究小组目前将所有代码托管在一个私有 SVN 存储库中 我们想开放我们的代码并将大部分代码移至 Github 上 问题是 有些代码是敏感的 不应该开放 但我们仍然希望它处于版本控制之下 目前 我们在 Github 上有开放代码
  • WPF:PropertyChangedCallback 仅触发一次

    我有一个用户控件 它公开一个名为 VisibileItems 的 DependencyProperty 每次更新该属性时 我都需要触发另一个事件 为了实现这一点 我添加了带有 PropertyChangedCallback 事件的 Fram
  • 限制对 Elastic Beanstalk 的 HTTP 访问

    是否可以将对 Elastic Beanstalk 应用程序的 HTTP 访问限制为仅某些 IP 地址 我已尝试向环境的安全组添加规 则 但这些规则似乎没有任何效果 这是因为所有 HTTP 流量都是通过弹性负载均衡器路由的吗 isn t安全组
  • C# 继承和默认构造函数

    假设有一个基类A和一个班级B源自A 那么我们知道类的构造函数A永远不会被类继承B 然而 当一个新对象B创建 然后 类的默认构造函数A在类的默认 自定义构造函数之前调用B被调用 也许这样做的目的是类的字段A需要初始化为默认值 现在 假设该类A
  • 如何在 Kubernetes Pod 之间共享存储?

    我正在评估 Kubernetes 作为我们新应用程序的平台 现在看来 一切都非常令人兴奋 但是 我遇到了一个问题 我在 GCE 上托管集群 并且需要某种机制在两个 pod 持续集成服务器和我的应用程序服务器 之间共享存储 使用 kubern
  • 起订量索引属性并在返回/回调中使用索引值

    我想要起订量一个具有索引的属性 并且我希望能够在回调中使用索引值 就像您可以在回调中使用起订量方法的方法参数一样 可能最容易用一个例子来演示 public interface IToMoq int Add int x int y int t