类通常通过使用以下语法编写的测试进行测试,这些语法由大量测试框架(例如 Ruby 的 Unit::Test;或本例中的 MiniTest)提供:
class TestLolcat < MiniTest::Unit::TestCase
def setup
@lolcat = Lolcat.new
end
def test_that_lolcat_can_have_cheezburger
assert_equal true, @lolcat.i_can_has_cheezburger?
end
end
或者使用第二种语法编写的测试,由一组重叠的测试框架提供(例如 RSpec;或者在这个例子中,MiniTest 再次):
describe Lolcat do
before do
@lolcat = Lolcat.new
end
it "must be able to have cheezburger" do
@lolcat.i_can_has_cheezburger?.must_equal true
end
end
(可能还有其他语法系列也适用于测试类方法和属性,但这是我感兴趣的两个。)
我想知道的是:这两个语法家族的正确名称是什么?
如果您想了解更多关于我为什么要问的信息,请参阅该行下方。
我问这个问题的原因是搜索网络并没有产生明显的共识。例如,MiniTest 文档将上面的第一个语法称为“单元测试”语法,将第二个语法称为“规范”语法。相比之下,Michael Hartl将用第二种语法编写的类方法和属性测试描述为“单元测试”。用这种语法编写的测试测试由多个类的交互产生的更高级别的功能,他称它们为“集成测试”。
我还看到人们将第一种和第二种语法分别描述为"Test::Unit style"和"RSPec-esque",或"TDD"语法和"BDD"语法。第二种语法的其他名称包括“ 'should-like syntax ”和“ it syntax ”。
我的理解(含糊地表明 Hartl 是正确的)如下:
- TDD是一种实践,而不是一种测试语法。具体来说,通常是编写一个失败的测试(例如单元测试或集成测试),然后编写代码使测试通过,然后在适当的情况下进行重构,然后重新开始循环。
- BDD也是一种实践,但它确实对测试语法做出了一些有限的规定。具体来说,它是遵循 TDD 的做法,但在测试名称中使用“应该”作为第一个单词,并在适当的情况下嵌套测试代码以提供上下文。
- 单元测试是一种实践,而不是一种测试语法。特别是测试单个代码单元的实践(例如类方法或属性)
- 单元测试是在单元测试过程中编写的测试,与使用的语法无关。
- 集成测试是一种实践,而不是一种测试语法。特别是测试由多个类的交互产生的高级功能的实践。
但是,这仍然不能完全解决问题。显然,我不是测试实践命名法、测试类型或测试语法方面的专家。对于上面给出的两种语法,我能想到的最好的名称分别是"'assert' syntax"和"'it ... do' syntax"。除非这些名称被广泛使用,否则我需要您的建议,StackOverflow 用户!