如何对公共接口背后高度复杂的代码进行单元测试

2024-03-17

我想知道应该如何通过 NUnit 测试此类功能。

Public void HighlyComplexCalculationOnAListOfHairyObjects()
{
    // calls 19 private methods totalling ~1000 lines code + comments + whitespace
}

通过阅读,我发现 NUnit 并不是为了测试私有方法而设计的,这是出于关于单元测试应该是什么的哲学原因;但试图创建一组完全执行计算中涉及的所有功能的测试数据几乎是不可能的。同时,计算被分解为许多相当离散的较小方法。然而,它们并不是彼此独立完成的逻辑上有意义的事情,因此它们都被设置为私有的。


你把两件事混为一谈了。接口(可能暴露很少)和这个特定的实现类,可能暴露更多。

  1. 定义尽可能窄的接口。

  2. 使用可测试(非私有)方法和属性定义实现类。如果班级有“额外”的东西也没关系。

  3. 所有应用程序都应该使用该接口,因此,不能以类型安全的方式访问该类的公开功能。

如果“某人”绕过接口并直接使用类怎么办?他们是反社会者——你可以放心地忽略他们。不要为他们提供电话支持,因为他们违反了使用接口而不是实现的基本规则。

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

如何对公共接口背后高度复杂的代码进行单元测试 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 私有模板函数

    我有一堂课 C h class C private template
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • 如何在orders、ordersDetails模式中保存、处理订单总金额?

    几个月前 当我开始设计应用程序数据库模式时 我被告知不要存储相同的数据 计算数据数据库中的多个位置 规范化 如果我这样做 当我在一个地方更新数据而在另一个地方不更新时 我会产生一系列错误 所以我做了一个订单表和订单详细信息表 像这样的东西
  • XPath 适合 HTML5 格式吗?

    我们知道XPath是为XML解析而创建的 HTML5 怎么样 因为它不一定遵守 XML 规则 有 2 种 XML 词法 XML 和解析 XML XPath 针对解析的 XML 表示形式工作 例如 DOM 或XDM http www w3 o
  • 服务器发送 200:OK 时 Backbone model.save 返回错误

    我定义了以下骨干模型 var User Backbone Model extend url login contentType application com example auth json defaults userName pass
  • PHP中的while循环问题

    我的标记结构如下 div div value1 div div value2 div div value3 div div value4 div div class clear div div div div value5 div div
  • ASP.NET 2.0 网站可以引用 WCF Web 服务吗?

    我们公司目前有一个网站部署在Windows 2000操作系统中 这意味着我们只能在该机器上安装 NET 2 0 升级网络服务器操作系统是不可能的 因为该网络服务器还托管我们国家的其他网络应用程序 作为我们 IT 政策的一部分 出于安全原因
  • 在内容级别与 google chrome 扩展一起使用时,未定义 DP_jQuery_*

    我正在开发一个谷歌浏览器扩展 我正在尝试在现有网页 内容级别 的 jquery ui 对话框中使用 jquery ui datepicker 就像这样 截屏 http sites google com site kamimark files
  • 如何获取最近经过身份验证的用户?

    我正在使用 MVC 3 并且刚刚实现了 FormsAuthenticationService 的包装器 类似于以下内容 public void SignIn string username bool createPersistantCook
  • 小程序中的 java.lang.reflect.invocacytargetexception 错误 [已关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的应用程
  • 在 mongoose 中使用 mongodb 多键索引方法索引引用数组

    我的架构有一个 ObjectId 数组 它们是对另一个架构的引用 我想要的是使用 mongodb 的多键索引方法来索引这个数组条目 所以给定一个ObjectId中的某些文档的产品目录集合 我可以列出我当前集合中具有给定的所有文档Object
  • 如何防止 VS2010 在每次更新服务引用时创建新绑定?

    我正在使用 C 3 5 和 Visual Studio 2010 中的 WCF 服务开发 Winforms 客户端应用程序 每次我使用 更新服务参考 在 IDE 中 考虑到我已经有一个有效的绑定app config 会生成一个具有相同名称和
  • 通过公共API导出非公共类型

    如果我有几个返回非公共类型的工厂方法和提供此非公共类型变量的配对方法集怎么办 这会导致 NetBeans 中出现标题为警告消息的结果 结果公共 API 将只包含两个配对的方法集 原因是使我的类型层次结构密封 就像 Scala 中的密封类 并
  • 异步更新数据后重绘 UITableView

    我有一个 UITableview 我使用数据异步加载 因此 tableview 可能会显示没有数据 我已经厌倦了 ReloadData 方法 但表视图仍然为空 直到我滚动表视图 突然数据出现 当我将表视图加载为详细视图并在项目之间切换时 会
  • 如何在终端中查看 Heroku 应用程序的当前数据库架构?

    我试图在终端 Mac OS X Lion 中查看我的 Heroku 应用程序架构 并偶然发现了一个可以执行此操作的命令 在终端中 我运行heroku run more db schema rb但它似乎显示较旧的架构版本 我刚刚迁移了 Her
  • FileHelpers:不带引号的 CSV 中的可选字段

    我在用文件助手 http www filehelpers com从 CSV 文件导入数据 问题是 某些版本的 CSV 文件具有比其他版本更多的字段 因此 我已将有时丢失的字段标记为可选 但这似乎不起作用 因为它不仅仅是在字段丢失时忽略 这似
  • Powershell 截断 SQL 查询输出

    我正在从 powershell 命令运行以下查询 不幸的是 该查询在结果字符串的末尾截断或添加了点 我调整了 powershell 的屏幕缓冲区大小 即右键单击 powershell 属性 gt 布局 gt 屏幕缓冲区大小 gt 宽度和高度
  • 当应用程序强制关闭或设备重新启动时,共享首选项会重置数据

    我正在开发一个在其中存储的应用程序username and password in SharedPreferences 一切对我来说都工作正常 存储和检索值 但我发现 当我重新启动设备或应用程序被强制关闭时 存储在SharedPrefere
  • Node.js 如何删除文件中的第一行

    我正在制作简单的 Node js 应用程序 我需要删除文件中的第一行 请问有什么办法可以做到吗 我认为使用 fs write 是可能的 但是如何呢 这是从文件中删除第一行的流版本 由于它使用流 意味着您不需要将整个文件加载到内存中 因此它更
  • Java - 创建具有给定范围的 IntStream,然后使用映射函数随机化每个元素

    因此 我创建了一个 IntStream 为其指定了 1 9 的范围 我希望能够使用 map 函数获取给定范围 1 9 中的每个元素并随机化每个元素 本质上 我想在每次程序运行时以不同的顺序流式传输数字 1 9 我对其他想法持开放态度 但它必
  • Azure 表存储在插入时引发异常:(409) 冲突

    我正在使用 Azure 表存储从 MVC 应用程序记录访问者信息 但有时会引发以下异常 WebException The remote server returned an error 409 Conflict System Net Htt
  • 如何对公共接口背后高度复杂的代码进行单元测试

    我想知道应该如何通过 NUnit 测试此类功能 Public void HighlyComplexCalculationOnAListOfHairyObjects calls 19 private methods totalling 100