鲍勃大爷:单元测试中单元是多小?


“单元测试”中的“单元”一词通常仅表示“小”。该词没有一致的定义。一些TDDer称它们为微测试以强调其微小性。我更喜欢它是“程序员测试”,因为使用TDD,它们是由程序员为程序员编写的。

众说纷纭:
banq注:鲍勃大爷将单元解释指向了人,而不是业务领域本身,这是一种思路,但也可能是捣糨糊:
Mathias Verraes:软件设计中,越小越好,粒度越细越好往往是一种坏建议

在OOP中,单元测试不是通用的定义,它是通过单个函数/方法测试单个路径。我知道在函数式编程中可能有所不同,但是我知道的大多数OOP开发团队都使用上面的定义。

同意。“单元”与“集成”之间的区分是人为的,不会造成混乱。最终,它不如面向代码的测试和面向用户的测试有用。

我不同意。“单元”一词代表无法进一步分解的结构。TDD的整体思想是协助彻底分解系统。

您可以将单元定义为小,中或大。在TDD中,单元应该很小,在OOP中,您可以在团队中达成一致。我认为小型单元有助于跟上维护和重构的步伐。节省重写测试。

它应该意味着事务。

恕我直言,如果它跨越流程边界,则不是单元测试。一旦这样做,它就在运行至少两个软件单元,因此不能称为单元测试。

我一直以为它的意思是“仅测试单个代码单元”,因为……没有依赖关系(否则将是集成测试)或尽可能少的依赖(Rails中的ActiveRecord对象,它们是随身携带的,但是这并不意味着我们必须在这里进行数据库测试)。

单元是自己有目的的最小的独立逻辑,无论是函数还是简单的类。

“程序员测试”虽然不那么引人注目,但在传达重要部分(测试对象是谁)方面做得更好。他们回答了“您构建代码正确了吗?”这个问题。测试术语确实非常混乱,但最终,测试的受众才是关键