使用 Moq 验证私有方法的执行

2023-11-27

我想测试以下逻辑(这显然是我的方法的精简版本):

public void myPublicMethod(params) {

    if(some_condition)
        privateMethod1();
    else
        privateMethod2();
} 

我模拟了该方法中的所有其他依赖项,并且进行了设置,以便我可以保证 some_condition 为 true。我想要做的是验证我的 privateMethod1() 是否被调用一次,而 privateMethod2() 根本没有被调用。这可能与起订量有关吗?

以下是有关该问题的一些注释:

  • privateMethod1() 和 privateMethod2() 与 myPublicMethod 位于同一类中,因此我无法为此类创建模拟对象。
  • privateMethod1/2 的主体都包含来自包含这些和 myPublicMethod 的类的许多依赖项,因此将 privateMethod1/2 分解为它们自己的帮助程序类将非常耗时

有什么想法吗?提前致谢。我愿意接受这是不可能的,但我想知道一种或另一种方式。


不要测试私有方法。它们是类的私有实现细节。您应该只测试执行公共方法的结果。只要你的结果符合预期,你就不应该关心结果是如何获得的。

在私有方法上构建测试将导致脆弱的测试,当您重构私有实现时(出于性能或其他原因),这些测试很容易被破坏。

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

使用 Moq 验证私有方法的执行 的相关文章

随机推荐

  • 在 Python 中迭代一系列日期

    我有以下代码可以做到这一点 但我怎样才能做得更好呢 现在我认为它比嵌套循环更好 但是当你在列表理解中有一个生成器时 它开始变得 Perl one linerish day count end date start date days 1 f
  • 如何使用Spring 3.x开发https站点?

    我是基于 Spring 的 Web 开发的新手 我们的网站是基于 Spring 的 目前是基于 http 的 所以相当不安全 由于该网站尚未上线 我们也通过正常的 JSON 请求向服务器发送登录名 密码 并且主要关注 JSP UI 设计 S
  • 选择不使用表格的两个日期之间的所有日期(生成日期列表)

    有没有一种方法可以在不使用任何 MySQL 表的情况下获取两个日期之间的所有日期 就像是 SELECT date BETWEEN 2012 02 10 AND 2012 02 15 这会导致这样的结果 out put date list 2
  • 设计邀请批量邀请 - Ruby on Rails

    我正在尝试使用 Devise invitable 来一次添加多个用户 基本上 当有人创建帐户时 他们要做的第一件事就是使用可邀请的表单添加一堆用户 只是不确定如何复制表单中的字段并让他们为每个条目发送创建请求 提前致谢 我就是这样做的 提供
  • GROUP BY 由间隙分隔的连续日期

    假设你 在 Postgres 9 1 中 有一个像这样的表 date value 其中有一些间隙 我的意思是 并非 min date 和 max date 之间的每个可能日期都有它的行 我的问题是如何聚合这些数据 以便单独处理每个一致的组
  • 在基于 Debian 的系统上如何找到字体所对应的 Unicode 代码点?

    从基于 Debian 的系统上的脚本语言 例如 Python 或 Ruby 我想找到以下之一 特定字体具有字形的所有 Unicode 代码点 具有特定 Unicode 代码点字形的所有字体 显然 1 或 2 可以从另一个派生 所以无论哪个更
  • 从 C# 中的 List 中删除重复项

    有人有一种在 C 中对通用列表进行重复数据删除的快速方法吗 如果您使用 Net 3 则可以使用 Linq List
  • 如何在 JavaScript 中处理 ctrl+arrow ?

    I ve noticed an problem when trying to catch keyboard shortcut CTRL an arrow I ve handled keydown event Now when I hold
  • 拼接微芯片的显微镜图像

    因此 我正在尝试拼接微芯片显微镜拍摄的图像 但很难将所有特征对齐 我已经在两个相邻图像之间有 50 的重叠 但即使如此 它也并不总是很合适 我使用 SURF 和 OpenCV 来提取关键点并找到单应矩阵 但尽管如此 这还远远不是一个可以接受
  • 如何在我的 iPhone 应用程序中包含字体?

    我已经看过这个帖子了 我可以在 iPhone 应用程序中嵌入自定义字体吗 这很有帮助 但我想简单地通过以下方式加载字体 UIFont font UIFont fontWithName Harrowprint size 20 有些人报告说这是
  • 为什么在 JavaScript 中,'3 instanceof Number' == false,但 '3..method()' 会调用 Number.prototype.method?

    鉴于字面数字严格来说不是一个实例Number 为什么我可以调用原型方法Number or String or Boolean 对应文字对象上的对象 这是跨浏览器的标准行为吗 当这种情况发生时到底发生了什么 我怀疑它在调用方法之前将文字强制转
  • 如何多次执行存储过程

    我有一个存储过程 我像这样执行 exec sp storedProc 123 ME 333 NULL 我需要指定 400 个不同的值 如何同时执行具有不同值的存储过程 您可以尝试使用 CURSORS 来完成此操作 DECLARE param
  • 如何从Instagram公共访问API获取视频?

    我知道这个 api 可以获取图像 但是视频呢 https www instagram com username a 1 我能够获取视频的缩略图 但无法获取源或网址本身 当您进行上述 API 调用时 它将返回code在里面 看起来像这样 BW
  • 鼠标移动时淡入

    如何使用 JavaScript 在第一次鼠标移动时淡入 div 内容 例如在 google com 上 我不想让它再次消失 Code 查看实际效果 attach event handler document body onmousemove
  • 使用configurationmanager从多个web.config文件中读取

    背景 我有一些数据存储在大约 100 个 Web 应用程序的 web config 文件中 这些数据正在逐渐转移到数据库中 网页将显示 web config 数据 直到有人单击 编辑 链接 在这种情况下 他们将被重定向到一个网页 该网页将允
  • System.ArgumentException:复杂 DataBinding 接受 IList 或 IListSource 作为数据源

    我使用下面的 C 代码来填充 WinForms 列表框 但是我想隐藏所有系统文件夹 例如 RecyclingBin 但它给了我以下错误 System ArgumentException 复杂 DataBinding 接受 IList 或 I
  • 使用 vba 取消选择数据透视表中的所有项目

    有人可以快速解释如何取消选择新创建的数据透视表中的所有项目 以便我可以返回并仅选择一个或两个项目吗 我尝试了以下方法 PivotItems Select All Visible False Thanks 这可能是最接近您想要的 Dim i
  • 在 node.js 中运行 .wasm 文件

    我读过很多关于在 Node js 中运行 wasm 文件的文章 每当我测试代码时 它都会抛出此错误 TypeError WebAssembly instantiate Import 0 module wasi snapshot previe
  • 使用自动布局删除并重新添加子视图

    使用自动布局时 我的理解是删除子视图 当然同时保留对它的引用 删除的子视图仍然知道其自动布局约束 但是 当稍后将其添加回超级视图时 子视图不再知道其帧大小 相反 它似乎得到了零帧 我假设自动布局会自动调整其大小以满足约束 难道不是这样吗 我
  • 使用 Moq 验证私有方法的执行

    我想测试以下逻辑 这显然是我的方法的精简版本 public void myPublicMethod params if some condition privateMethod1 else privateMethod2 我模拟了该方法中的所