unit-testing - 单元测试如何测试任何东西?
问题描述
我不明白我是如何用单元测试来测试任何东西的。
假设我正在测试我的存储库类是否可以正确地从数据库中检索值。执行此操作的正确方法是实际调用真实数据库并检索和检查这些值。
但是单元测试背后的想法是它应该隔离完成,连接到正在运行的数据库并不是隔离。所以通常做的是模拟或存根数据库。
但是,为什么要在带有硬编码数据和硬编码返回值的假数据库上进行测试甚至测试任何东西呢?这似乎是同义反复并且浪费时间。
还是我不了解如何正确进行单元测试?
甚至对数据库调用进行单元测试吗?
解决方案
我不明白我是如何用单元测试来测试任何东西的。
简短的回答:您正在测试逻辑,并忽略副作用。
你没有测试一切;但你正在测试一些东西。
此外,如果您记住您并没有真正测试具有副作用的代码,那么您就会有动力安排代码,以便实际依赖于副作用的部分很小。大块实际上并不关心数据来自哪里,因为它们很容易测试。
所以“某事”可以是“大多数事情”。
存在阻抗问题 -如果您的测试替身未能充分模拟生产原件,那么您的某些测试结果将不准确。
我的理念是尽可能少地测试以达到给定的信心水平
想象“尽可能少”的一种方法是考虑成本——我们的目标是给定的置信水平,所以我们希望使用廉价的单元测试尽可能多地实现这种置信度,然后使用更昂贵的技术来提高差异。
Cory Benfield 的演讲Building Protocol Libraries the Right Way描述了我们在这里讨论的那种分离的例子。如何解析 HTTP 消息的逻辑与读取字节的问题是分开的。如果你让复杂的部分容易测试,而难以测试的部分太简单而不能失败,你成功的机会就很大。
推荐阅读
- javascript - TypeError:不能混合 BigInt 和其他类型,使用显式转换(我试图添加/混合 BigInt 和 var)
- python - 在与值列表进行比较时,是否有更好的方法来遍历字典?
- javascript - 如何在索引不为 0 的 Javascript 数组上使用数组解构?
- html - 我想像这样创建 Owl Carousel 但我不知道如何解释
- python-3.x - python中Matlab的pdist2等价物如下
- r - R Survey 库中是否有一个函数可以测试单个变量的加权比例是否相等?
- javascript - 如何通过html标签将字符串拆分为数组
- c++ - 如何从文本文件中查找特定数据并进行更改?
- python - 使用 matplotlib 屏蔽一个区域
- python - append 不适用于 lambda 和 map。如何在列表中添加新元素?