【发布时间】:2010-06-01 08:46:01
【问题描述】:
与自动化流程相比,我能否了解手动单元测试的优点和缺点。
【问题讨论】:
-
只有我一个人,还是像考试题一样措辞?
标签: unit-testing
与自动化流程相比,我能否了解手动单元测试的优点和缺点。
【问题讨论】:
标签: unit-testing
奇怪的问题 - 单元测试应该是自动的,因此可重复且易于运行。对于许多人(包括我)来说,“手动单元测试”是一个自相矛盾的术语。
在无法进行自动化测试的情况下,手动测试可能很有用。这些通常不在单元测试级别,但更高 - 例如集成、GUI、压力等测试。
通过单元测试,您可以一次测试一小段代码(通常是单个方法/类)。测试本身是用代码编写的,因此它们可以(几乎总是)由单元测试框架自动运行。
更新:既然你为你的问题提供了更具体的背景,那么给出一个具体的答案就更容易了:-)
我确信自动化单元测试在软件项目的整个生命周期中几乎总是会为自己付出很多倍的代价。设置它们比手动测试成本更高,但运行它们的次数越多,您节省的时间就越多 - 并且您越早获得关于代码因新更改而中断的位置的反馈。
用单元测试覆盖遗留代码绝对不容易,但如果产品对您的公司有价值并且预计会持续数年,那么它仍然是值得努力的。尤其如此,因为在现实生活中,生产系统的寿命往往会超过其预期寿命。
一方面是,您“尝试检查我们编写的所有代码路径” - 通过自动单元测试与代码覆盖工具相结合,您可以自动查看 - 通常就在您的 IDE 中,如果集成了覆盖工具好吧 - 您最新的单元测试未涵盖哪些代码路径。
我推荐Working Effectively with Legacy Code - 它包含有关如何为纠结、写得不好的遗留代码编写单元测试的大量宝贵知识。
【讨论】:
“手动单元测试”几乎是不可能的。单元测试被定义为单独测试小单元代码。您不能真正手动执行此操作。
现在,如果您谈论的是集成测试,那就另当别论了:
专业手动集成测试:
Con 手动集成测试:
总而言之,最好同时进行手动和自动集成测试;这些有时可以很好地相互补充,因为实际上有些事情可以更容易地以自动化方式进行测试,而另一些则根本无法自动化。
【讨论】:
我认为您问题的唯一真正答案是没关系,因为您必须同时拥有两者。
自动化单元测试将允许您的开发人员编写能够根据他们对规范的理解自动验证代码的测试。由于它们是自动化的,它们可以一遍又一遍地运行,每次几乎没有变化。根据定义,这些单元测试将知道软件如何在底层工作,因此可以被视为白盒测试——测试知道一些(如果不是全部)底层代码.
另一方面,手动测试会从用户的角度揭示问题。您将能够找出不熟悉底层代码和结构的实体会遇到哪些错误,以及程序的可用性是否存在问题。这被认为是黑盒测试。
【讨论】:
我认为“手动测试”意味着在没有测试库的情况下进行测试。
“手动测试”的优点:
缺点“手动测试”:
共识:
不使用流行的测试库是一个非常糟糕的习惯,你肯定会后悔像我一样走这条路。现在我被旧代码的鬼魂刺痛了,我尽可能地使用 Jest。
【讨论】: