MOQ- 使用 Func 参数设置和验证通用方法

2023-12-11

我有一个第三方接口,我想模拟它的方法。为了明确我的目的,请考虑以下 IFoo 接口,它具有像 M2 这样的通用方法。 M2 参数之一的类型为 Func。

        public interface IFoo
        {
            bool M1<T>();
            bool M2<T>(T arg, Func<T, string> func);
        }

如果我将 M2 方法设置为:

            var mock = new Mock<IFoo>();
            mock.Setup(foo => foo.M2(It.IsAny<It.IsAnyType>(),It.IsAny<Func<It.IsAnyType, string>>())).Returns(true);
            mock.Object.M2("arg1", s => s);
            mock.Verify(foo => foo.M2(It.IsAny<It.IsAnyType>(), It.IsAny<Func<It.IsAnyType, string>>()));

那么验证就会失败。但如果它是使用特定类型(如字符串)设置和验证的,那么它就可以工作:

            mock.Setup(foo => foo.M2(It.IsAny<string>(), It.IsAny<Func<string, string>>())).Returns(true);
            mock.Object.M2("arg1", s => s);
            mock.Verify(foo => foo.M2(It.IsAny<string>(), It.IsAny<Func<string, string>>()));

问题是传递给我的 Mock 的 T 的实际类型是该第三方库中定义的内部类。所以我无法设置和验证像上面提到的特定类型。

我在第一次设置或验证中是否遗漏了某些内容,或者这是一个尚未解决的众所周知的问题? 我使用的是最小起订量 4.13.1,我的测试项目是 .Net Core 3.1


而不是

It.IsAny<Func<It.IsAnyType, string>>()

for the Func参数,试试

(Func<It.IsAnyType, string>) It.IsAny<object>()

工作示例:

var mock = new Mock<IFoo>();
mock.Setup(foo => foo.M2(It.IsAny<It.IsAnyType>(), (Func<It.IsAnyType, string>) It.IsAny<object>())).Returns(true);

mock.Object.M2("arg1", s => s);

mock.Verify(foo => foo.M2(It.IsAny<It.IsAnyType>(), (Func<It.IsAnyType, string>) It.IsAny<object>()));

据我所知起订量无法匹配Func<>使用类型参数It.IsAnyType匹配器。

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

MOQ- 使用 Func 参数设置和验证通用方法 的相关文章

随机推荐

  • 计算多个值的不同行数

    让我们考虑一下这张表 它指定了一个人购买房产的次数 user property john car john car john house peter car peter car amanda house amanda house 我需要知道
  • 在 Mockito 中检测到未完成的存根

    我在运行测试时遇到以下异常 我正在使用 Mockito 进行嘲笑 Mockito 库提到的提示没有帮助 org mockito exceptions misusing UnfinishedStubbingException Unfinish
  • 如何在滚动时更新计时器上的 UITableView

    我的问题很难解释 所以我会尽力解释它 我正在使用 TableView 做一个快速应用程序 在此 TableView 中 我有一些数据存储在本地 字典 数组 var 因此 在我的 TableView 中 我每 0 01 秒刷新一次此数据 然后
  • 如何在 Windows Phone 8.1 中使用 ShareLinkTask 命名空间?

    我正在开发一个应用程序 我正在尝试分享我的应用程序 在 Windows Phone 8 Siverlight 和 Windows Phone 8 1 Silverlight 中 我使用了这些代码 ShareLinkTask shareLin
  • 如何确定位置计数器“.”的基地址。 VMA 和 LMA 何时不同?

    根据ld手册在特殊符号上 即位置计数器 笔记 实际上指的是从开始的字节偏移量 当前包含对象 通常这是 SECTIONS 语句 其起始地址为 0 因此 可以用作绝对地址 如果 然而 它是在部分描述中使用的 它指的是 从该部分开始的字节偏移量
  • JPA 2.0 多对多与额外列 - 更新集合

    我在用下面的例子 Entity public class Employer Id GeneratedValue strategy GenerationType IDENTITY private int id OneToMany mapped
  • R:N维数组的子集化

    考虑以下 3 维数组 set seed 123 arr array sample c 1 10 dim c 3 4 2 这产生 gt arr 1 1 2 3 4 1 10 9 8 2 2 5 1 4 10 3 6 7 3 5 2 1 2 3
  • 使用白名单对用户输入进行清理

    我有这段代码可以清理名为 用户名 的变量上的用户输入 username clean preg replace a zA Z0 9 POST username if strlen username clean die username is
  • 如何在使用gunicorn 的Google App Engine 上运行长任务?

    GAE flex默认使用gunicorn作为入口点 这很好 除了我有一个需要很长时间来处理的函数 在数据库中抓取网站和故事数据 并且gunicorn默认在30秒超时 然后一个新的worker从头开始执行任务 等等 我可以将gunicorn超
  • org.h2.jdbc.JdbcSQLException:找不到表

    我收到这个异常 org h2 jdbc JdbcSQLException Table CUSTOMERS not found SQL statement SELECT FROM CUSTOMERS 这是 H2 控制台 我在那里创建了一个表
  • 替换数据框列表中的值

    我有一个数据框列表 每个列都有一个 ID 列 后跟许多数字列 带有列名称 我想将所有数字列的所有 1 替换为 0 但保持 ID 列相同 我可以使用单个数据框来部分完成此操作 df 1 lt 0 但是当我尝试将其嵌入到 lapply 中时 它
  • 有没有 ios-ntp 的替代方案来获取原子/当前时间 ios?

    在我的应用程序中 我想获得准确的日期和时间 基本上 在我的应用程序中 会有一个时间敏感部分 用户只有在特定时间之后才能启动 但是 如果我从设备中获取日期和时间 用户可以轻松更改设备上的日期和时间 Settings gt General gt
  • 在 jar 中加载文件

    我需要将配置文件打包到 jar 中 配置文件位于 jar 文件的根目录下 但是我收到以下错误 引起原因 java lang IllegalArgumentException URI 不是分层的 在 java io File 来源未知 Fil
  • python:将 1/0 列表转换为布尔值列表

    尝试将 1 0 列表转换为布尔值列表 bool 1 0 1 0 似乎不起作用 1 0 1 0 1不起作用 还有另一种方法 希望是非列表理解 吗 在Python 2中 bool list map bool int list 在Python 3
  • 从 XPath 表达式填充 XML 模板文件?

    从 XPath 表达式的映射填充 或生成 XML 模板文件的最佳方法是什么 要求是我们需要从模板开始 因为这可能包含 XPath 表达式中未捕获的信息 例如 起始模板可能是
  • 在c中不使用线程和sleep()方法定期调用函数

    我想调用一个函数 假设每 10 或 20 秒调用一次 当我搜索时 我想出了一些线索sleep 方法无处不在 我还检查了 C 中的时间和时钟类 但找不到任何对我的问题有帮助的内容 定期调用函数的最简单方法是什么 Use libevent在我看
  • 来自 Windows 窗体应用程序的 HTTP Post C#

    我需要用 C 编写一个表单应用程序 通过 HTTP POST 将参数发送到 url 并返回响应 我真的不知道从哪里开始 这可能吗 预先感谢 加尔 首先请参阅 1 HttpWebRequest类 2 HttpWebResponse类 3 We
  • 如何使谷歌表格公式只计算一次?

    我的 Google 表格中有 3 行 即股票 价格和总计 所以 我只是对股票和价格使用 多个 公式 然后将值放入总行中 但我不希望每当我更改库存值时总行都会更新或更改值 有人能帮我吗 假设您希望单元格 A1 只计算一次其值 您可以将以下内容
  • 在 ASP.NET MVC 中跟踪 LINQ TO SQL 生成的查询

    关于 LINQ to SQL 生成的查询输出的快速问题 我正在使用 ASP NET MVC 项目 Visual Studio 2008 并且正在尝试 MSDN 文档中的建议 MyDataContext dc new MyDataContex
  • MOQ- 使用 Func 参数设置和验证通用方法

    我有一个第三方接口 我想模拟它的方法 为了明确我的目的 请考虑以下 IFoo 接口 它具有像 M2 这样的通用方法 M2 参数之一的类型为 Func public interface IFoo bool M1