在 C++ 中使用友元类与添加访问器进行单元测试?

2024-02-03

添加返回对象内部状态的函数进行单元测试是否比使测试类成为友元更好? - 特别是,当除了单元测试之外的功能没有用处时。


95% 的时间单元测试应该只测试类的公开暴露的表面。如果您正在幕后测试某些内容,那就是测试实现细节,这本质上是脆弱的,因为您应该能够轻松更改实现并仍然让测试工作。它不仅脆弱,而且您还可能会尝试测试在计划的使用场景中实际上不可能的东西,这是浪费时间。

如果你想添加的访问器的目的只是为了测试函数是否达到了预期的效果,那么你的类设计可能会违反另一个原则,即类状态机的类应该始终明确它所处的状态,如果这会影响人们与班级互动时发生的事情。在这种情况下,提供这些只读访问器是正确的。如果它不影响类的行为,请参阅我之前有关实现细节的内容。

正如您正确地说的那样,用未使用的东西弄乱班级的公共表面也是不可取的,因为其本身的原因。

If I had在您的情况下在访问器和好友之间进行选择,我会选择好友,仅仅是因为you拥有您的测试并可以在紧要关头更改它。您可能不拥有找到使用您的额外访问器的方法的小丑的代码,然后您就会陷入困境。

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

在 C++ 中使用友元类与添加访问器进行单元测试? 的相关文章

  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 无需编译的 ES6 单元测试

    我无法找到任何 Mocha 或任何其他通过 Gulp 直接在 ES6 代码上运行的单元测试框架的示例 没有 Babel Webpack 等 我找到了一个在浏览器中使用 ES6 代码运行 Mocha 的示例 经过一些修改 但它不是自动化的 有
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 如何跨多个文件跨越 javascript 命名空间?

    我永远忽略了javascript 几年前我开始使用 jQuery 这样我就可以过得去 但随着我开始更多地进行 TDD 我昨天决定真正深入研究 javascript 之后可能还有咖啡脚本 在我的 ASP NET Web 窗体应用程序中 我有很
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 带有 ng-repeat 指令的容器高度为零

    我有一个带有 ng repeat 指令的 div 它会遍历一个数组并向我的容器添加一堆 div 当我打电话时 height 在现在充满 div 的容器上 它返回 0 它似乎返回 ng repeat 指令执行之前的高度 将 ng repeat
  • 如何翻转单个UIView(不翻转父视图)

    这是一个 iPad 项目 其中我有一个带有多个子视图的 UIView 我正在尝试使用 UIView transitionFromView toView duration options completion 为其中一个 UIView 制作动
  • C 和 C++ 风格文件 IO 之间的性能差异

    我一直听说 C 文件 I O 操作比 C 风格的 I O 慢得多 但我没有找到任何实际参考来说明它们实际上有多慢 所以我决定在我的机器上测试它 Ubuntu 12 04 GCC 4 6 3 ext4分区格式 首先 我在磁盘中写入了约 900
  • ActiveRecords 数组转为 JSON

    我知道 ActiveRecord 提供了一个 to json 方法 该方法允许使用 only 和 except 从 JSON 输出中过滤出字段 目前我正在使用以下命令将 find 中的数组格式化为 JSON customers Custom
  • VSCode 扩展从开发中运行,但在使用 webpack 打包时不起作用

    我已经构建 运行 打包并发布了一个扩展 但打包程序抱怨有 2509 个文件 4 28MB 并建议使用打包程序 我已按照以下说明进行操作捆绑扩展 https code visualstudio com api working with ext
  • UI 自动化和 WPF 的经验 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正在开发一个相当大的基于 WPF 的应用程序 并希望在我们的测试套件中包含一些自动化 UI 测试 其中已经包含许多单元测试 The 用户界面
  • 如何不使用 .data() 跳过第一个元素

    The data数组恰好包含 5 个对象 以下代码仅显示最后 4 个 并跳过第一个 d3 csv csv data function error data var table d3 select div var tr table selec
  • 如何使用 JSON 格式的日期过滤数据

    我想使用日期进行过滤 但数据是 JSON 格式 如何在 JavaScript 中使用日期过滤大型数据集 Example data date 22 12 2014 name selva date 10 10 2010 name raja da
  • CakePHP 时间助手问题

    我想我可能在这里犯了一个错误 当尝试在控制器的时间助手中使用简单函数时 出现以下错误 在视图中使用相同的函数调用时 我没有收到错误 以下是来自控制器的错误 接下来是失败的控制器代码 接下来是正在运行的视图代码 任何帮助表示赞赏 Error
  • 在 flutter v2.5 中迁移强调色

    在 flutter 2 5 更新后 我的主题数据有点损坏并且不再接受accentColor 我查看了文档 发现它被 重命名 为 colorScheme secondary 但无论我如何尝试 我都无法让它为我工作 这是我当前的代码 class
  • 使用正则表达式仅从列表中提取不包含重复字母的单词

    我有一个很大的单词列表文件 每行一个单词 我想过滤掉重复字母的单词 INPUT abducts abe abeam abel abele OUTPUT abducts abe abel 我想使用正则表达式 grep 或 perl 或 pyt
  • 将 RRULE 解析为可读文本?

    我正在寻找一个库 php 或一些伪代码来将 Ical RRULE 解析为可读文本 例如谷歌日历 RRULE FREQ MONTHLY INTERVAL 1 BYDAY 1FR 3FR 5FR gt Monthly on Friday of
  • 如何处理 C++ 接口中的单元

    我目前正在设计一个 API 我希望用户能够编写如下代码 PowerMeter forceVoltage 1 mV PowerMeter settlingTime 1 ms 目前我们使用如下定义来做到这一点 define mV 1 0e 03
  • 如何向 Django 管理中的字段添加可点击链接?

    我有这个 admin py class LawyerAdmin admin ModelAdmin fieldsets Name fields last first firm name firm url school year graduat
  • WCF服务继承

    我有一个非常复杂的服务主机 其中包含多个 DUPLEX 服务 它们提供了一些常见的功能 连接 断开 保持活动等 但除此之外 它们还各自提供了非常具体的功能 我的所有服务都继承自一个公共基类 抽象 因此 我还负责客户端应用程序的一部分 我希望
  • ImageMagick 和 GraphicsMagick 有什么区别?

    我发现自己正在评估这两个库 除了 GraphicsMagick 的比较之外 我发现 ImageMagick 仍然有更新 而且看起来两者几乎相同 我只是想用 C 进行基本的图像操作 即图像加载 过滤器 显示 在这些库之间进行选择时我应该注意什
  • 基于三列的 awk 子集文件方法

    我有一个 BED 格式的文件 input bed less input bed A 678 934 0bb6fdb5 0 A 715 986 8bc17666 0 A 716 1029 065f9d32 0 A 769 1367 572ae
  • 如何向Matlab提供它想要的旧gcc版本?

    我的电脑上有 Ubuntu 10 10 和 gcc 4 4 4 我尝试编译一些使用 CUDA 的 mex 文件 但收到以下错误消息 gt gt cns build hmax compiling home leMe hmax cns sour
  • 如何正确理解“光标”

    我正在尝试将光标应用于我的应用程序 但是 该文档对我来说不够清晰 Google 对光标的描述http code google com appengine docs python datastore queries html Query Cu
  • 在 C++ 中使用友元类与添加访问器进行单元测试?

    添加返回对象内部状态的函数进行单元测试是否比使测试类成为友元更好 特别是 当除了单元测试之外的功能没有用处时 95 的时间单元测试应该只测试类的公开暴露的表面 如果您正在幕后测试某些内容 那就是测试实现细节 这本质上是脆弱的 因为您应该能够