Unit testing 有没有过多的单元测试?

Unit testing 有没有过多的单元测试?,unit-testing,Unit Testing,我试着浏览了所有关于单元测试的页面,但没有找到这个问题。如果这是一个重复,请让我知道,我会删除它 我最近受命在我的公司帮助实施单元测试。我意识到我可以对所有Oracle PL/SQL代码、Java代码、HTML、JavaScript、XML、XSLT等进行单元测试 有没有过多的单元测试?我应该为上面的所有内容编写单元测试吗?还是这太过分了?对您认为可能会更改的任何代码进行单元测试。这取决于项目及其对失败的容忍度。没有单一的答案。如果你可以冒一个bug的风险,那么不要测试所有东西 当您有大量的测试

我试着浏览了所有关于单元测试的页面,但没有找到这个问题。如果这是一个重复,请让我知道,我会删除它

我最近受命在我的公司帮助实施单元测试。我意识到我可以对所有Oracle PL/SQL代码、Java代码、HTML、JavaScript、XML、XSLT等进行单元测试


有没有过多的单元测试?我应该为上面的所有内容编写单元测试吗?还是这太过分了?

对您认为可能会更改的任何代码进行单元测试。

这取决于项目及其对失败的容忍度。没有单一的答案。如果你可以冒一个bug的风险,那么不要测试所有东西

当您有大量的测试时,您的测试中也可能有bug。增加你的头痛


测试需要测试的东西,留下不需要测试的东西,这通常会留下相当简单的东西。

您应该只为您自己编写的任何代码编写单元测试。无需测试固有提供给您的功能

例如,如果您得到一个带有add函数的库,那么您不应该测试add(1,2)是否返回3。现在,如果您已经编写了该代码,那么是的,您应该对其进行测试


当然,不管是谁编写了这个库,都可能没有对它进行过测试,它也可能不起作用。。。在这种情况下,您应该自己编写它,或者获得一个具有相同功能的单独的,但至少是那些复杂的任务或那些最有可能包含您没有想到的错误/案例的任务。

单元测试的要点是能够运行一组快速测试来验证您的代码是否正确。这使您可以验证代码是否符合规范,还可以进行更改并确保它们不会破坏任何内容

运用你的判断力。你不想把所有的时间都花在编写单元测试上,否则你就没有时间编写实际的代码来进行测试。

Kent Beck和我的一个类似的名人。
这个问题的语义稍有不同,但当您对单元测试进行了单元测试,并认为您已经提供了200%的覆盖率时,答案肯定是相关的。

是的,存在过多的单元测试。一个例子是以白盒方式进行单元测试,这样您就可以有效地测试特定的实现;这样的测试将通过要求符合要求的代码需要新的单元测试(因为测试取决于具体的实现细节)来有效地减缓进度和重构。

虽然更多的测试通常更好(我还没有参与一个实际有太多测试的项目),但投资回报率会在某一点触底,你应该继续前进。顺便说一句,我假设你有有限的时间来做这个项目


添加单元测试会带来一定程度的递减回报——在某一点(代码完成有一些理论)之后,最好将有限的时间花在其他事情上。这可能是更多的测试/质量活动,如重构和代码审查、真实用户的可用性测试等,也可能是花费在其他事情上,如新功能或用户体验改善。

有一种称为测试驱动开发的开发方法,它本质上说没有太多的东西(非冗余)单元测试。然而,这种方法不是一种测试方法,而是一种设计方法,它依赖于工作代码和或多或少完整的单元测试套件,其中的测试驱动关于代码库的每一个决策

在非TDD情况下,自动化测试应该测试您编写的每一行代码(特别是分支覆盖率很好),但即使如此,也有例外情况-除非您确定该平台中存在会影响您的bug,否则不应测试供应商提供的平台或框架代码。您不应测试精简包装(或者,同样,如果您需要测试,则包装不是精简的)。您应该测试所有的核心业务逻辑,拥有一组在某些基本级别上运行数据库的测试当然是有帮助的,尽管在每次编译时都运行单元测试的常见情况下,这些测试永远不会起作用

特别是在数据库方面,测试本质上是缓慢的,并且取决于数据库中保存了多少逻辑,很难正确进行。通常,像dbs、HTML/XML文档和模板以及程序的其他文档方面的验证比测试更多。区别通常是测试试图执行rcise执行路径,而验证尝试直接验证输入和输出


要了解更多信息,我建议您阅读“代码覆盖率”。如果您对此感到好奇,这里有很多可用的资料。

我建议在某些情况下,您可能需要自动测试,但根本不需要“单元”测试(),并且花在编写单元测试上的任何时间都最好花在编写系统测试上

是否存在过多的单元测试

当然。问题是在足够的单元测试覆盖重要的功能领域和集中精力为客户创造系统功能方面的新价值之间找到正确的平衡

单元测试代码和让代码不被测试覆盖都有成本

从单元测试中排除代码的成本可能包括(但不限于):

  • 由于修复了无法自动测试的问题,增加了开发时间
  • 修复QA测试期间发现的问题
  • 修复代码到达客户时发现的问题
  • 由于客户对通过测试的缺陷不满而导致收入损失
撰写联合国报告的成本