在起订量中重置模拟验证?

2024-04-08

设置如下:

public interface IFoo
{
    void Fizz();
}

[Test]
public void A()
{
    var foo = new Mock<IFoo>(MockBehavior.Loose);

    foo.Object.Fizz();

    foo.Verify(x => x.Fizz());

    // stuff here

    foo.Verify(x => x.Fizz(), Times.Never()); // currently this fails
}

基本上我想在// stuff here使foo.Verify(x => x.Fizz(), Times.Never()) pass.

因为这可能构成起订量/单元测试滥用,所以我的理由是我可以做这样的事情:

[Test]
public void Justification()
{
    var foo = new Mock<IFoo>(MockBehavior.Loose);
    foo.Setup(x => x.Fizz());

    var objectUnderTest = new ObjectUnderTest(foo.Object);

    objectUnderTest.DoStuffToPushIntoState1(); // this is various lines of code and setup

    foo.Verify(x => x.Fizz());

    // reset the verification here

    objectUnderTest.DoStuffToPushIntoState2(); // more lines of code

    foo.Verify(x => x.Fizz(), Times.Never());
}

基本上,我有一个状态对象,需要做相当多的工作(无论是制作各种模拟对象还是其他一些事情)才能将其推入 State1。然后我想测试从State1到State2的转换。我不想复制或抽象代码,而是更愿意重复使用 State1 测试,将其推入 State2 并执行我的断言 - 除了验证调用之外,我可以执行所有这些操作。


现在起订量支持此功能

Use .Invocations.Clear()在该库的最新版本上:

var foo = new Mock<foo>();
foo.Invocations.Clear();

旧答案

我认为在这篇文章创建很久之后,他们添加了 OP 要求的功能,有一个名为 Moq 扩展方法Moq.MockExtensions.ResetCalls().

通过这种方法,您可以完全按照您的意愿进行操作,如下所示:

[Test]
public void Justification()
{
    var foo = new Mock<IFoo>(MockBehavior.Loose);
    foo.Setup(x => x.Fizz());

    var objectUnderTest = new ObjectUnderTest(foo.Object);

    objectUnderTest.DoStuffToPushIntoState1(); // this is various lines of code and setup

    foo.Verify(x => x.Fizz());

    foo.ResetCalls(); // *** Reset the verification here with this glorious method ***

    objectUnderTest.DoStuffToPushIntoState2(); // more lines of code

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

在起订量中重置模拟验证? 的相关文章

  • CLR 2.0 与 4.0 性能比较?

    如果在 CLR 4 0 下运行 为 CLR 2 0 编译的 NET 程序会运行得更快吗 应用程序配置
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析

随机推荐

  • iframe 内容未在 iOs5 iPad/iPhone 中的滚动下呈现

    我正在开发 iPad html5 网页 需要显示来自其他来源 不同域 的页面 我正在将这些页面加载到iframe 然后滚动iframe使用iOs5新的滚动能力 如下面的代码所示 div style height 1185px width 1
  • 将 2 列与 pandas 中的列表值连接起来(避免重复和 NaN)

    我的 pandas 数据框如下 loc 1 loc 2 mumbai gujarat sri lanka chennai UP Goa telangana Kashmir Goa Rajkot NaN Bihar Orissa 我想创建一个
  • 将 Liquibase 扩展与 Maven 结合使用

    我正在尝试使用Liquibase Oracle 扩展 http liquibase jira com wiki display CONTRIB Oracle Extensions from maven liquibase 插件 http w
  • 我也可以在客户端使用 Coffeescript 吗?

    有没有办法在客户端使用CoffeeScript 有两种方法 将 CoffeeScript 编译为 JavaScript 并像部署任何 JavaScript 文件一样部署它 或者 Use coffee script js https coff
  • Xamarin WKWebView 接受自签名证书

    我在网上看到过各种例子说明如何接受它们 但我总是得到发生 SSL 错误 无法与服务器建立安全连接 我要注意的是 该方法肯定被调用 在 iOS 8 4 模拟器和 iOS 11 实际设备上运行 因此未调用的方法不是这里的问题 到目前为止我已经尝
  • 主要 JavaScript 框架/库列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始更深入地研究 JavaScript 开发 并希望减少时间去探索必须使用哪些工具来完成这项工作 我正在寻找一些网站 其中所有主要的 J
  • 用于生成唯一链接的 Rails 插件?

    我的应用程序中有很多地方需要生成带有唯一标记的链接 foo com g6Ce7sDygw 或其他 每个链接可能与一些会话数据相关联 并将用户带到一些特定的控制器 操作 有谁知道有一个 gem 插件可以做到这一点 它很容易实现 但会更干净 无
  • 无法通过 cloudformation yaml 创建 AWS::ECS::Service,模型验证失败

    在创建期间AWS ECS Service通过 cloudformation 我收到错误 Model validation failed 该错误与以下内容有关 HealthCheckGracePeriodSeconds和一些其他属性 错误详细
  • generateCertificate() 时出现证书异常

    我正在开发我的 Android 应用程序 我正在尝试生成X509证书来自我的证书文件流的实例 但是得到CertificateException 这是我的简单代码 import java security cert CertificateEx
  • withColumn() 中的 PySpark list() 只能工作一次,然后 AssertionError: col 应该是 Column

    我有一个 DataFrame 其中有 6 个字符串列 名为 Spclty1 Spclty6 另外 6 个字符串列名为 StartDt1 StartDt6 我想将它们压缩并折叠成如下所示的列 Spclty1 StartDt1 Spclty6
  • 究竟是什么在管理光束中的水印?

    Beam 的强大功能来自于它先进的窗口功能 但它也有点令人困惑 在本地测试中看到一些奇怪的情况 我使用rabbitmq作为输入源 其中消息并不总是得到ackd 并修复了不总是关闭的窗口 我开始挖掘 StackOverflow 和 Beam
  • C# 对带有换行符的文本字符串进行编码

    我有一个字符串正在写入响应的输出流 保存此文档并在 Notepad 或 WordPad 中打开它后 我会在预期的位置得到格式良好的换行符 但是当我使用常规的旧 Windows 记事本打开此文档时 我会得到一个带有 方形符号 的长文本字符串
  • Clearcase 中的派生对象

    我想问一下 ClearCase 中的派生对象到底是什么以及如何工作 另外我想问是否有其他程序具有相同的功能 因为在 Git MKS 或 IBM Rational Team Concert 中我找不到类似的东西 它是否已经过时了 这与动态视图
  • 如何在 JavaScript 中逐行循环换行符分隔的 json?

    我的项目中有一个 JSON 文件 如下所示 id 707860 name Hurzuf country UA coord lon 34 283333 lat 44 549999 id 519188 name Novinki country
  • SQL查询6度分离用于网络分析

    我正在使用 D3 js 构建网络分析 以在我的应用程序中显示连接的电话号码 分隔度可达六度 用于查找初始连接的 SQL postgres 如下 相当简单 然而 我对如何修改它以遍历六个级别的连接然后停止感到困惑 SELECT player
  • 更改输入焦点上的 div 颜色

    我正在尝试改变的颜色div带信s div class search container div
  • 将多个同名资源添加到 Xcode for iPhone

    是否可以在资源组中使用图像的双重名称 谢谢 您可以拥有多个同名资源 只要 1 它们不在同一目录中 并且 2 您已通过引用将资源添加到您的 Xcode 项目中 1 因为任何目录都不能包含两个同名的文件 2 因为 Xcode 尊重通过引用添加的
  • 如何检查数组中的所有元素是否为零? [复制]

    这个问题在这里已经有答案了 我想知道除了nil数组中的值 arr nil nil nil nil gt true arr nil 45 nil nil gt false 可以有任何类型的任何值 不仅45 Use the Enumerable
  • win-7 cmd 上的 GNU awk,不会将输出重定向到文件

    如果相关的话 我直接从sourceforge中的GNU指向源下载了GNU awk V 3 1 6 我正在使用 Windows 版 wget 获取 URL 页面 处理传入的文件后 我将其减少为单行 我必须从中提取一个键值 这是一个相当长的字符
  • 在起订量中重置模拟验证?

    设置如下 public interface IFoo void Fizz Test public void A var foo new Mock