验证使用 Moq 调用的通用方法

2023-11-23

我无法验证该模拟IInterface.SomeMethod<T>(T arg)被称为使用Moq.Mock.Verify.

我可以验证该方法是在“标准”接口上调用的It.IsAny<IGenericInterface>() or It.IsAny<ConcreteImplementationOfIGenericInterface>(),并且我使用验证通用方法调用没有遇到任何问题It.IsAny<ConcreteImplementationOfIGenericInterface>(),但我无法验证使用调用了通用方法It.IsAny<IGenericInterface>()- 它总是说该方法未被调用并且单元测试失败。

这是我的单元测试:

public void TestMethod1()
{
    var mockInterface = new Mock<IServiceInterface>();

    var classUnderTest = new ClassUnderTest(mockInterface.Object);

    classUnderTest.Run();

    // next three lines are fine and pass the unit tests
    mockInterface.Verify(serviceInterface => serviceInterface.NotGenericMethod(It.IsAny<ConcreteSpecificCommand>()), Times.Once());
    mockInterface.Verify(serviceInterface => serviceInterface.NotGenericMethod(It.IsAny<ISpecificCommand>()), Times.Once());
    mockInterface.Verify(serviceInterface => serviceInterface.GenericMethod(It.IsAny<ConcreteSpecificCommand>()), Times.Once());

    // this line breaks: "Expected invocation on the mock once, but was 0 times"
    mockInterface.Verify(serviceInterface => serviceInterface.GenericMethod(It.IsAny<ISpecificCommand>()), Times.Once());
}

这是我正在测试的课程:

public class ClassUnderTest
{
    private IServiceInterface _service;

    public ClassUnderTest(IServiceInterface service)
    {
        _service = service;
    }

    public void Run()
    {
        var command = new ConcreteSpecificCommand();
        _service.GenericMethod(command);
        _service.NotGenericMethod(command);
    }
}

这是我的IServiceInterface:

public interface IServiceInterface
{
    void NotGenericMethod(ISpecificCommand command);
    void GenericMethod<T>(T command);
}

这是我的接口/类继承层次结构:

public interface ISpecificCommand
{
}

public class ConcreteSpecificCommand : ISpecificCommand
{
}

这是当前发行版本 Moq 4.0.10827 中的一个已知问题。请参阅 GitHub 上的讨论https://github.com/Moq/moq4/pull/25。我已经下载了它的开发分支,编译并引用了它,现在你的测试通过了。

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

验证使用 Moq 调用的通用方法 的相关文章

  • 模板类包装任意类型/非类型模板类

    假设我有一个模板类base和一个班级wrapper其中包含一个实例化成员base 我想定义班级wrapper这样它依赖于模板参数包 该参数包只是 传递 给实例化成员base 例如 考虑下面的代码 它工作得很好 include
  • 如何知道并加载特定文件夹中的所有图像?

    我有一个应用程序 C Builder 6 0 需要知道特定文件夹中的图像总数 然后我必须加载它们 在 ImageList 或 ComboBoxEx 中 或任何其他控件中 我怎样才能做到这一点 我知道如何在控件中加载图像 或保存在 TList
  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • LINQ to XML - 如何正确使用 XDocument

    现在我首先要说的是 这确实是一项任务 然而 在我遇到 Linq to XML 语法之前 我几乎已经完成了它 我有 2 个课程 曲目和 CD 现在作为作业的一部分 我创建了一张 CD 然后向其中添加了一些曲目 在搜索了大量完美解释了如何从 x
  • 控制台应用程序 .net Core 2.0 的配置

    在 net Core 1 中我们可以这样做 IConfiguration config new ConfigurationBuilder AddJsonFile appsettings json true true Build 这样就可以使
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • 改进C++逐行读取文件的能力?

    我正在解析大约 500GB 的日志文件 我的 C 版本需要 3 5 分钟 我的 Go 版本需要 1 2 分钟 我正在使用 C 的流来流式传输文件的每一行以进行解析 include
  • 多个同名内存数据库

    关系到这个答案 https stackoverflow com a 48446491 596758 我试图通过设置让多个上下文工作UseInMemoryDatabase以同名 下面的测试失败 第二个上下文为空 我还需要做什么才能在内存数据库
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再

随机推荐

  • 从 BaseAdapter 调用 notificationDataSetChanged 时 ListView 不会更新

    当底层数据发生变化时 我很难更新 ListActivity 我正在使用派生的 vom BaseAdapter 的自定义 列表 适配器 CustomListAdapter 来使用自定义列表元素 CustomListElement 填充 Lis
  • Erlang 是否总是在同一节点上的进程之间复制消息?

    演员消息传递语义的忠实实现意味着消息内容是从logical观点 即使对于不可变类型也是如此 消息内容的深度复制仍然是执行者模型实现的瓶颈 因此为了性能 某些实现支持零复制消息传递 尽管从程序员的角度来看它仍然是深度复制 是否实现了零拷贝消息
  • 如何等待网络流有数据可供读取?

    我的应用程序中有一个工作线程负责三件不同的事情 对其中两个作业的请求出现在我编写的队列中 当网络流上出现请求时 另一个作业就会被激活 我希望我的工作线程在没有工作要做时等待 这对于两个队列来说很容易 因为它们公开了一个 ManualRese
  • Jquery跨域问题

    我正在尝试访问另一个域中的网络服务 但它没有返回任何内容 后来我发现这是由于跨域访问造成的问题 网上查了很多文章 但没有一篇是像我这样的新手能读懂的 有人可以帮助我如何访问网络服务吗 以下是我的代码 variables for Add Co
  • 创建一个人类可读的列表,并在 ruby​​ 列表中的最后一个元素之前插入“and”

    如何获取一个列表并将其转换为逗号分隔的字符串 并在数组中的最后一个元素之前添加 and 采取类似的东西 list1 a b c 并将其变成这样 gt a b and c 我记得 ruby 有一个方法 然而我已经搜索过 但没有找到 谢谢您的帮
  • %matplotlib 内联在 iPython 和 Jupyter 控制台上不起作用

    我是第一次尝试 Jupyter 控制台 但无法获取 matplotlib inline工作的魔力 以下是示例会话的屏幕截图 The plot shows in a separate window after I run Line 6 and
  • 将彩色图喷射到灰度图

    我有一个喷射色彩图 我想知道是否有某种方法可以转换为灰度 我不能使用平均值 因为最大值和最小值变为相同的灰色 或者是否有某种方法可以转换为另一个调色板 我在 Google 上找不到转换它的函数 MATLAB 使用一种叫做rgb2ind但我想
  • .NET - 第一次有机会进行密集调试的异常侦听器?

    这可能不切实际 但是是否有可能使组件能够收到其进程中发生的所有首次机会异常的通知 我们有一些第三方 由我们承包 组件 它们除了吃例外之外什么也做不了 而业务关系的政治使整个考验变得非常痛苦 我们还意识到 我们的一些代码正在执行令人失望的操作
  • Visual Studio 2019 的 SSDT? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我找到了VS2017版本的安装程序here 但是有2019预览版的吗 SQL Server 报告服务和 SQL Server 分析服务 SSRS S
  • 是否可以绕过 MATLAB 对矢量格式文件中字体嵌入的限制?

    根据 MA TLAB 手册 当您使用以下命令保存图形时print或通过选择file save 如果您选择painters渲染器并保存为 PDF 或 EPS 矢量格式 所有字体都被替换 有没有办法绕过这个限制 每当我输出一个数字时 我是否使用
  • 比较Java中的日期字符串[重复]

    这个问题在这里已经有答案了 所以我正在使用dateString1 compareTo dateString2 它根据每个字符的 Unicode 值与字符串进行字典顺序比较 并返回一个 int 这是一个代码示例 String dateStri
  • 如何使用一个jquery在同一页面中制作多个“阅读更多”按钮?

    我想仅使用一个 jquery 在同一页面中制作多个 多读 和 少读 按钮 当我单击 阅读更多 按钮时 它会显示一些内容 并在段落末尾显示 少读 按钮 我完成了第一步 一页中有三个阅读更多按钮 一个工作正常 但另外两个不工作 请给出一些建议
  • 从没有文字内容的页面中删除自动添加的

    (使用短代码)

    我有一个由 WordPress 驱动的网站 其主页上使用静态页面 仅使用短代码来生成内容 页面通过将首页设置为静态页面并使用 the content 来获取这些短代码 在 page php 上 页面内容没有空格 只有短代码 所以看起来像这样
  • Ruby on Rails:heroku 运行 rake 资产:预编译

    请帮我理解什么heroku run rake assets precompile确实如此 自从我开始在 ruby on Rails 上工作以来 我总是会在推送到 github 和 heroku 之前运行这三个命令 bundle exec r
  • 如何使用 DataContractSerializer 从文件中反序列化 WCF Soap 响应消息?

    当我调用 Web 服务操作时 WCF 使用 DataContractSerializer 将消息反序列化到代理类 为什么我不能执行相同操作 以下是 ActLoginResponse xml 文件中的肥皂消息
  • Heroku - 添加了 SSH 公钥,但仍然出现权限被拒绝(公钥)错误

    之前上传到Heroku很多次了 这次不知道出了什么问题 也许是因为我使用的是公共互联网 无论如何 所以我添加了一个新的公钥 gt heroku keys add Found existing public key C Users Chris
  • 在 *ngFor-- IONIC2/Angular2 中迭代两个数组

    我已将值存储在两个数组中 以便在单个 ion list 中迭代 Billerstatusstate 和 Billerstatusnamelst 是两个数组 我尝试过以下迭代
  • Heroku 提供 create-react-app 开发构建而不是生产

    我是 create react app 的新手 我刚刚使用 redux 和 react router dom 进行了全新设置 然后将其推送到 Scalingo 然后推送到 Heroku 它们最终都为开发构建提供服务 我的 redux log
  • 无法将 .ttf 字体包含到项目中

    我试图将字体 Hipchick 包含到我的项目中 但它不起作用 我测试了几种方法 最终采用了以下方法 iOS 提示 自定义字体试图解决这个问题 但仍然不起作用 这是一些屏幕和代码 字体添加到项目中 hitch ttf 它被添加到 plist
  • 验证使用 Moq 调用的通用方法

    我无法验证该模拟IInterface SomeMethod