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

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(使用前将#替换为@)

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

随机推荐

  • 删除 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