显然,I don't understand unit testing。这很好,考虑到我以前从未这样做过。我正在开始一个新项目,并希望从一开始就对其进行单元测试,所以我希望学习。
我一直把单元测试与代码覆盖等同起来,认为你应该有单元测试来覆盖应用程序中的每个函数/方法,但显然情况并非如此,我完全误解了这个概念。
所以,
答案 0 :(得分:2)
我没有完整的答案(我很乐意听到任何人这样做,老实说),但至少可以抛出几点......
答案 1 :(得分:1)
根据TDD(测试驱动开发)方法,我们应该测试每个公共函数,以及该函数中的每个执行路径。
答案 2 :(得分:0)
单元测试是一种工具,有许多方法可以使用它。这是我的方法:
我针对服务和DAO签名编写单元测试,而不是针对DTO和实体类型。大多数值类型将被间接测试。应该测试DTO和实体类型中的equals和hashCode方法。
我使用带有模拟依赖项的纯单元测试和带有完整后端的集成测试。为了获得适当的覆盖,人们需要两者。
答案 3 :(得分:0)
我一直把单元测试等同于代码覆盖范围
那不是完全错误。单元测试/任何其他类型的测试自动化在100%的情况下都只有一个真正不可否认的好处:它们实际上运行了代码,即它们涵盖了代码。编译器不会运行代码。静态代码分析不会运行代码。显然,阅读代码不会使其运行。自动化测试会运行代码(以及手动调试)。
任何其他声称的好处仅是潜在的,并且完全取决于编写测试的人的能力和最佳意图。
认为您应该具有涵盖所有内容的单元测试 功能/方法在您的应用程序中,但显然并非如此
正确,并不是值得在构建过程中自动运行每一行代码。
所以
- 哪些功能可以从单元测试中受益?
- 哪些类型的功能不应该进行单元测试?
请牢记以上至少两个条件:
不可能静态消除错误的可能性(尝试以无法表示无效状态和场景的方式设计代码,并避免从单元测试堆中拯救自己)
发生错误的可能性不低,例如代码不是琐碎的/内聚的等等。
OR
这是关键任务组件/部署错误会带来严重后果。在这种情况下,即使出现错误的可能性极低,也应该保持偏执。
OR
代码是已发布/外部可见合同的一部分,例如库接口。在那种情况下,即使是原始的重言式测试也很有用,因为它们会作为可执行的要求/防止您无意间更改已发布的合同(某种上一类关键任务测试的特定情况)。
OR
编写测试实际上比手动编写代码容易,这在大型整体式庞然大物中非常正确。这并不意味着您必须永远保持测试状态,以后如果需要大量维护,可以随时删除它。但是,当然必须在部署之前运行代码,并且必须至少观察一次并接受结果。
就我所知,以上是对的,但前提是要务实。如果优先考虑为草率的工作找个好借口,那么就争取100%覆盖率,并且其他宗教测验做法也完全合理(认为“这不是我的错-所有测验都是绿色的!”)