在 Moq 中模拟通用方法而不指定 T

2024-04-10

我有一个接口,其方法如下:

public interface IRepo
{
    IA<T> Reserve<T>();
}

我想模拟包含此方法的类,而不必为其可使用的每种类型指定安装方法。理想情况下,我只是希望它返回一个new mock<T>.Object.

我该如何实现这一目标?

看来我的解释不清楚。这是一个示例 - 当我指定 T (此处为字符串)时,这现在是可能的:

[TestMethod]
public void ExampleTest()
{
    var mock = new Mock<IRepo>();
    mock.Setup(pa => pa.Reserve<string>()).Returns(new Mock<IA<string>>().Object);
}

我想要实现的是这样的:

[TestMethod]
public void ExampleTest()
{
    var mock = new Mock<IRepo>();
    mock.Setup(pa => pa.Reserve<T>()).Returns(new Mock<IA<T>>().Object);
    // of course T doesn't exist here. But I would like to specify all types
    // without having to repeat the .Setup(...) line for each of them.
}

被测对象的某些方法可能会调用三种或四种不同类型的保留。如果我必须设置所有类型,我必须为每个测试编写大量设置代码。但在单个测试中,我并不关心所有这些,我只需要非空模拟对象,除了我实际测试的对象(我很乐意为此编写一个更复杂的设置)。


在起订量 4.13 中It.IsAnyType and It.IsSubtype<T>类型被引入 https://github.com/Moq/moq4/wiki/Quickstart#matching-generic-type-arguments,您可以使用它来模拟泛型方法。例如。:

public interface IFoo
{
    bool M1<T>();
    bool M2<T>(T arg);
}

var mock = new Mock<IFoo>();
// matches any type argument:
mock.Setup(m => m.M1<It.IsAnyType>()).Returns(true);

// matches only type arguments that are subtypes of / implement T:
mock.Setup(m => m.M1<It.IsSubtype<T>>()).Returns(true);

// use of type matchers is allowed in the argument list:
mock.Setup(m => m.M2(It.IsAny<It.IsAnyType>())).Returns(true);
mock.Setup(m => m.M2(It.IsAny<It.IsSubtype<T>>())).Returns(true);

请注意,这不适用于以下方法return一个通用的,原因在这里解释 https://github.com/moq/moq4/issues/1220#issuecomment-1019537444。还讨论了可能的解决方法。

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

在 Moq 中模拟通用方法而不指定 T 的相关文章

  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 为什么 std::function 不是有效的模板参数,而函数指针却是?

    我已经定义了名为的类模板CallBackAtInit其唯一目的是在初始化时调用函数 构造函数 该函数在模板参数中指定 问题是模板不接受std function作为参数 但它们接受函数指针 为什么 这是我的代码 include
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 不使用放置 new 返回的指针时的 C++ 严格别名

    这可能会导致未定义的行为吗 uint8 t storage 4 We assume storage is properly aligned here int32 t intPtr new void storage int32 t 4 I k
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 为什么我不能在 C++ 中的 `std::map` 中存储引用?

    我知道引用不是指针 而是对象的别名 但是 我仍然不明白这对我作为程序员到底意味着什么 即幕后的引用是什么 我认为理解这一点的最好方法是理解为什么我无法在地图中存储参考 我知道我需要停止将引用视为指针的语法糖 只是不知道如何 按照我的理解 引
  • 反序列化函数(字节数组到 uint32 )

    编写反序列化函数将字节数组转换为 32 位无符号整数的最佳方法是什么 typedef unsigned long uint32 uint32 deserialize uint32 unsigned char buffer uint32 va
  • 无法播放从 Android 应用程序发送的 Firebase 存储中的音频

    我正在使用 firebase 存储从我的 Android 应用程序上传音频 然后在我的应用程序中下载和播放 音频文件已上传 但当我从 firebase 存储播放它时 它采用如下图所示的视频格式 并且不播放音频 我还将其元数据设置为音频 mp
  • 产品和报价项目之间的概念区别是什么

    涉及班级 Mage Sales Model Quote Item and 法师 目录 型号 产品 我通过监听事件 在购物车添加上 得到了它们 我正在尝试从外部来源更新产品的数量信息 到目前为止 我的代码仅基于产品信息 我不确定这是否正确 报
  • 如何使用 pandas 计算所有列之间的相关性并删除高度相关的列?

    我有一个巨大的数据集 在机器学习建模之前 总是建议您首先应该删除高度相关的描述符 列 我如何计算列wice相关性并删除具有阈值的列 例如删除所有列或描述符具有 gt 0 8 的相关性 它还应该保留减少数据中的标题 示例数据集 GA PN P
  • Web API 2 OData = $format 不起作用:请求始终被忽略

    我有一个 Web API OData 项目 一切都运行良好 我现在尝试使用 format 参数返回 xml 而不是 JSON 而不是指定标头请求 但它不起作用 我尝试过这些方法 http localhost 3845 api Custome
  • Google Apps 脚本用于计算昨天收到的具有特定标签的电子邮件数量,然后将 # 每天保存到电子表格

    基本上就是标题所说的 但我想 1 自动计算我的 Gmail 帐户收到的带有特定标签的电子邮件数量 2 每天数一次 即使是零 3 每天向 Google 电子表格报告 4 所以我可以制作这样的月度报告 日期 日期 日期 10 月总计 平均每天
  • Python Tkinter - 恢复原始默认键绑定

    我正在 Win7 机器上使用 Python 2 7 和 Tkinter GUI 在某些情况下 我想完全覆盖 Tab 键的正常默认行为 但前提是存在某些条件 之后我想恢复到默认行为 请注意 目前我对 Tab 键感兴趣 但在某些时候我可能也需要
  • 表格单元格背景渗透到圆角表格中

    正如可以看到的这个演示 http jsfiddle net ZFYvq 其中表格设置有圆角 特别是右上角和左下角 这些角会被其包含的单元格的背景颜色破坏 我尝试应用一些padding到桌子上 但这并没有帮助 我唯一的选择是添加额外的列和行并
  • 树视图 - 突出显示多个项目

    在 Powerbuilder 中 这里有人知道我如何在树视图上突出显示多个项目吗 Selecteditem 函数没有这样做 我正在寻找 Selectedrow id 正在做的行为 Thanks 我自己没有尝试过 但有一个例子代码交换 htt
  • 使用带有 1 字节变量的 Python struct.unpack

    我该如何使用struct unpack 或 Python 中可用的其他一些函数可以轻松转换one字节变量到Python整数 现在 它是以一种相当蹩脚的方式完成的 file open telemetry dat rb read magic f
  • 对数字字符串映射的字符串进行排序

    我们有一个关于字符串排序的问题 在这种情况下排序不起作用 1 A 1 B 10 A 10 B 9 A 9 B 我们真正想要的是 1 A 1 B 9 A 9 B 10 A 10 B 如果我们将其作为字符串排序 结果将类似于第一部分 如果我们先
  • 在java中旋转图像

    我正在寻找旋转图像 我有一个JInternalFrame其中包含一个JLabel 标签包含图像 旋转图像后 我需要调整内部框架的大小 我当前的代码旋转图像 但图像边缘周围有黑色并且偏离中心 对于如何解决这个问题 有任何的建议吗 public
  • 使用expect进行无人值守(无提示)Homebrew安装

    根据Homebrew安装说明 可以使用以下命令进行安装 ruby e curl fsSL https raw github com Homebrew homebrew go install 这可行 但需要用户输入两次 确认安装并在脚本调用的
  • 在 Ruby 中生成 Paypal 签名“X-PAYPAL-AUTHORIZATION”

    Ruby 中是否有任何库可以生成签名 X PAYPAL AUTHORIZATION 代表通过 paypal Permissions API 授权我们的账户持有人进行调用时需要的标头 我完成了权限流程并获取了所需的访问令牌 tokenSecr
  • 在 Oracle SQL 中从当前日期减去 30 年

    我需要编写一个查询 选择所有出生日期在 30 年前的人 不幸的是 由于我使用的是 Oracle 所以我无法使用DATEADD 功能 我目前已经得到了这个 但显然这不是动态的 并且不会随着时间的推移而改变 SELECT Name DOB FR
  • 无法修改 Dictionary 的返回值,因为它不是变量

    有这样的错误 无法修改 System Collections Generic Dictionary this string 的返回值 因为它不是变量 My code Dictionary
  • Mysql 的 Doctrine 查询

    我想创建一个 Doctrine 查询 Doctrine 2 3 SELECT FROM car WHERE plate like AND datetime BETWEEN 2013 03 13 22 20 18 AND 2013 03 13
  • Ruby 进程之间的共享变量

    我有一个 Ruby 程序 可以加载两个非常大的 yaml 文件 因此我可以通过分叉一些进程来利用多核来提高速度 我尝试过寻找 但我无法弄清楚如何或是否可以在不同的进程中共享变量 以下代码是我目前拥有的 proteins decoyProte
  • 在 Moq 中模拟通用方法而不指定 T

    我有一个接口 其方法如下 public interface IRepo IA