Unit testing 测试术语

Unit testing 测试术语,unit-testing,testing,tdd,integration-testing,bdd,Unit Testing,Testing,Tdd,Integration Testing,Bdd,类通常通过使用以下语法编写的测试进行测试,这是由大量测试框架提供的(例如Ruby的Unit::Test;或者如本例中的MiniTest): classtestlolcat

类通常通过使用以下语法编写的测试进行测试,这是由大量测试框架提供的(例如Ruby的Unit::Test;或者如本例中的MiniTest):

classtestlolcat
或者使用第二种语法编写的测试,这是由一组重叠的测试框架(例如RSpec;或者在本例中,再次使用MiniTest)提供的:

描述Lolcat所做的事情
在做之前
@lolcat=lolcat.new
结束
它“必须能够有奶酪汉堡”做什么
@lolcat.我能吃奶酪汉堡吗?一定是真的吗
结束
结束
(可能还有其他语法系列也适用于测试类方法和属性,但这两个是我感兴趣的。)

我想知道的是:这两个语法系列的正确名称是什么?

如果你想知道更多关于我为什么要问的问题,请看下面的一行


我问这个问题的原因是,搜索网络并没有产生明显的共识。例如,将上面的第一个语法称为“单元测试”语法,将第二个语法称为“规范”语法。相比之下,迈克尔·哈特尔。如果用这种语法编写的测试测试多个类交互产生的高级功能,他称之为“集成测试”

我还看到人们将第一种和第二种语法描述为“TDD”语法和“BDD”语法。第二种语法的其他名称包括“”和“”

我的理解(模糊地表明Hartl是正确的)如下:

  • TDD是一种实践,而不是一种测试语法。具体来说,这是一种通常编写失败测试(例如单元测试或集成测试)的实践,然后编写代码使测试通过,然后在适当的情况下进行重构,然后重新启动循环
  • 这也是一种实践,但它确实对测试语法做出了一些有限的规定。具体来说,这是遵循TDD的做法,但在测试名称中使用“应该”作为第一个单词,并嵌套测试代码以提供上下文(如果合适)
  • 单元测试是一种实践,而不是测试语法。特别是测试单个代码单元(例如类方法或属性)的实践
  • 单元测试是在单元测试过程中编写的测试,与所使用的语法无关
  • 集成测试是一种实践,而不是测试语法。特别是测试由多个类交互产生的高级功能的实践

然而,这仍然没有完全澄清问题。显然,我不是测试实践、测试类型或测试语法的命名专家。对于我上面给出的两种语法类型,我能想到的最好的名称分别是“'assert'syntax”和“'it…do'syntax”。除非这些名字被广泛使用,否则我需要你的建议,各位用户

我不确定是否有一个公认的定义

我喜欢这样想他们

迷你测试版本更像是一种资产

rspec版本更像是一种规范


后者是为了引导您远离对“测试”的强调,而更多地是为了从利益相关者的角度来驱动需求。

测试方法没有全球公认的语法名称。大多数单元测试工具都鼓励使用某种约定,比如JUnit鼓励所有测试方法名称都以“test”开头,而现在通过@test注释就不需要了

大多数单元测试工具都建议开发人员同意某种约定。测试方法名称没有语法,因为目标受众是应该轻松掌握测试方法功能的开发人员


如果您正在测试上下文中寻找定义,请参阅GerardMeszaros的《xUnit测试模式》一书。作者对不同的术语作了一些澄清。他对“双重测试”的定义已经被多次引用。

在处理软件时,需要区分“什么”和“如何””:程序应该做什么,如何工作

IMHO,在开发的所有阶段,记住两者之间的差异是很重要的。这种区别支持几个原则,例如,测试和单元测试

唉,将这两个概念分离并不总是那么容易。诸如排序之类的经典示例很容易处理:存在几种排序算法(how),它们都会生成一组经过排序的元素(what),这些元素可以很容易地表示为断言、契约和不变量。对于业务代码,情况可能变得不那么清楚

我相信这两种语法基本上实现了相同的功能,但第二种方法有助于从“什么”而不是“如何”的角度进行思考。让我们来考虑这两个陈述:

断言值%2=0

价值应该是均等的

它们强制执行相同的不变量,但第二个不变量在“什么”上增加了更多的empahsis,并且更具可读性

例如,Smalltalk使用了
should
的措辞,但测试是Ruby中的命令式代码

SetTestCase>>testAdd
    empty add: 5.
    self should: [empty includes: 5]

不幸的是,我的题外话仍然不能回答你的问题,而且太长了,无法发表评论。

如果我们分享一些关于BDD和TDD的历史,可能会澄清一些事情

早在2003年,TDD选择的单元测试框架是JUnit。Dan North开始使用-so、BDD语法。现在,这看起来与您在Ruby中所做的(以及RSpec所做的)不太相似,但尽管如此,RSpec还是作为同一事物的Ruby版本创建的。JBehave从不嵌套测试代码;对于单元级示例和t,它只有“应该”