对于单元测试来说,慢到什么程度算太慢?

2024-01-31

迈克尔·费瑟斯有效地处理遗留代码,第 13-14 页提到:

单元测试需要 1/10 第二个运行是一个缓慢的单元测试...... 如果[单元测试]运行得不快,他们 不是单元测试。

我可以理解为什么如果有 30,000 个测试,1/10 秒就太慢了,因为运行需要接近一个小时。然而,这是否意味着 1/11 秒更好呢?不,不是真的(因为只快了 5 分钟)。因此,严格的快速规则可能并不完美。

因此,当考虑单元测试有多慢才算太慢时,也许我应该重新表述这个问题。对于开发人员来说,等待单元测试套件完成多长时间才算太长?

举一个测试速度的例子。看一下几个 MSTest 单元测试持续时间计时:

0.2637638 seconds
0.0589954
0.0272193
0.0209824
0.0199389
0.0088322
0.0033815
0.0028137
0.0027601
0.0008775
0.0008171
0.0007351
0.0007147
0.0005898
0.0004937
0.0004624
0.00045
0.0004397
0.0004385
0.0004376
0.0003329

所有 21 个单元测试的平均值为 0.019785 秒。请注意,最慢的测试是由于它使用 Microsoft Moles 来模拟/隔离文件系统。

因此,在这个例子中,如果我的单元测试套件增长到 10,000 个测试,could运行时间超过3分钟。


我研究过一个这样的项目,其中单元测试的数量使得系统需要很长时间才能测试所有内容。 “太长”意味着您基本上没有将其作为正常开发例程的一部分。

然而,他们所做的是将单元测试分为两部分。关键测试和“其他一切”。

关键测试只需要几秒钟就可以运行,并且只测试系统最关键的部分,这里的“关键”意味着“如果这里出现问题,一切将会出错”。

导致整个运行时间过长的测试被归入“其他所有”部分,并且仅在构建服务器上运行。

每当有人将代码提交到源代码控制存储库时,关键测试将再次首先运行,然后在未来几分钟内安排“完整运行”。如果在该时间间隔内没有人签入代码,则会运行完整的测试。当然,他们用的时间不是 30 分钟,而是 8-10 分钟。

这是使用 TeamCity 完成的,因此即使一个构建代理忙于完整的单元测试套件,其他构建代理仍然可以获取正常提交并根据需要经常运行关键单元测试。

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

对于单元测试来说,慢到什么程度算太慢? 的相关文章

  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • 循环中的递归算法复杂度(运行时间)

    我想了解您对如何检测以下递归算法的 T n 运行时间 的意见 Charm 是一种用于发现事务数据库中频繁闭项集的算法 频繁闭项集列表是在一组交易 tids 中多次出现的频繁项 例如面包和牛奶是经常一起购买的物品 它们是通过将索引为 i 的当
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute
  • 缓存感知树的实现

    I have a tree where every node may have 0 to N children 用例是以下查询 给定指向两个节点的指针 这些节点是否位于树的同一分支内 Examples q 2 7 gt true q 5 4
  • 有人真正有效地实现了斐波那契堆吗?

    你们中有人曾经实施过斐波那契堆 http en wikipedia org wiki Fibonacci heap 几年前我就这样做了 但它比使用基于数组的 BinHeaps 慢了几个数量级 当时 我认为这是一个宝贵的教训 告诉我们研究并不
  • 带完整堆栈跟踪的单元测试

    这似乎是一个愚蠢的问题 但我无法在任何地方找到答案 我正在使用 Rails 3 1 和 Test Unit 当测试失败时 我只能看到堆栈的顶部 例如 ERROR creating a message sends emails 1 35s N
  • 如果字典可以通过“==”进行比较,为什么还需要assertDictEqual?

    说实话我一直用assertDictEqual 因为有时当我不使用它时我得到的信息是 相等的字典是不一样的 但是 我知道字典可以通过以下方式进行比较 操作员 gt gt gt a 1 b 2 c 1 2 b 2 a 1 c 1 2 True
  • 为什么我应该使用 Google 的 CDN for jQuery?

    这对某些人来说可能是显而易见的 但我一直在想 为什么我应该依赖谷歌的服务器 https developers google com speed libraries devguide为我的网站托管 jQuery 仅仅是因为这样加载速度更快吗
  • 指定自定义应用程序上下文

    我们正在将一些数据服务从使用 jersey spring 的 Jersey 1 x 迁移到使用 jersey spring3 的 Jersey 2 x 我们有一些继承自 JerseyTest 的测试类 其中一些类使用 web xml 文件中
  • Linq to object:内部查询性能

    在回答其中一项时问题 https stackoverflow com questions 46501476 using linq and lambdas to search dictionaryclassliststruct data 46
  • MySQL max_allowed_pa​​cket 参数有什么问题?

    我需要增加 max allowed pa cket 参数 以适应一些理论上非常大的项目 如果我将此参数设置为 10M 那么与设置为 1M 或 4M 相比 我要支付什么价格 如果有的话 感谢您的任何意见 托马斯 我找到了这个解释 http w
  • 我想在使用 Jest Snapshots 时获得图像文件名/路径

    我已经开始使用Jest https facebook github io jest 在一个新项目中有很多 我现在正在使用Snapshot https facebook github io jest docs tutorial react h
  • 在CSS中重置Margins/Padding时使用*是错误的吗?

    应该避免以下内容 还是应该因其简单性而受到赞扬 作为记录 我在我构建的每个站点中都使用它 但我注意到它并不存在于许多主流 CSS 重置框架中 他们是否也不使用它 margin 0 padding 0 最好不要使用它 因为它会导致表单元素出现
  • 为什么 istream/ostream 慢

    于 50 40http channel9 msdn com Events GoingNative 2013 Writing Quick Code in Cpp Quickly http channel9 msdn com Events Go
  • 如何快速从文件夹树中选取随机文件?

    我试图从文件夹树中选择一个随机文件 从固定路径开始 并在所有子文件夹 或所选文件夹本身 中递归 搜索 我的想法是 创建文件列表 计算文件数量 在该范围内选择一个随机数 然后选择该索引处的文件 这是我的代码 create list of al
  • C# 代码在 IIS 上运行速度快,但在 Mono 上运行速度慢 - 如何改进?

    我有一个 ASP NET 应用程序 它在我的 Windows 开发计算机上运行良好 不过 服务器是运行 Mono 的 Linux 一旦上传 相同的代码在 Windows 上的运行速度会比在 Windows 机器上慢 4 到 5 倍 例如 一
  • apachebench 支持多部分 POST 吗?

    我想使用apachebench ab 来测试文件上传性能 我已阅读手册 但找不到实现目标的方法 我的目标是尝试使用 POST 方法和 multipart form data 格式通过 HTTP 请求上传文件 ab 支持 p POST FIL
  • Activator.CreateInstance 性能严重下降的案例

    我们在 NET 服务器端应用程序中观察到一个有趣的行为 CPU 内存密集型工作会随着时间的推移而减慢 我们使用 PerfView 尝试找到罪魁祸首 看来Activator CreateInstance是这一个 我们是怎么找到它的 我们在新会
  • 为什么线程本地存储不使用页表映射来实现?

    我希望使用 C 11thread local将非常频繁地访问的每线程布尔标志的关键字 然而 大多数编译器似乎都使用一个表来实现线程本地存储 该表将整数 ID 槽 映射到当前线程上的变量地址 此查找将发生在性能关键的代码路径内 因此我对其性能
  • 在 React 中使用 setTimeout() 并测试它

    我意识到我一直在使用setTimeout 在我的项目中 也许 比我应该做的更多 我进行了快速研究并浏览了 Github 上的一些开源 React 项目 并决定我应该询问一下 I use setTimeout主要是为了更改类名或添加样式以对

随机推荐